【发布时间】:2015-06-15 19:23:42
【问题描述】:
我在专门用于此表格的特殊页面上有一个联系表格。专用控制器包括:
def new
@message = Message.new
end
def create
@message = Message.new(message_params)
if @message.valid?
MessageMailer.new_message(@message).deliver_now
flash[:success] = "Thank you!"
redirect_to contact_path
else
render 'new'
end
end
现在我还想在我的主页底部添加此表单。我已将 html 添加到视图中,并将其控制器添加到主页:
def home
@message = Message.new
end
该表单现在也可以在主页上使用。但问题是:如果我在主页上提交表单,它会重定向到特殊的联系页面(因为redirect_to contact_path)。如果有错误,它会转到特殊的联系页面(因为render 'new')。
如果使用那里的表单,最有效的补救方法是什么,以便它在主页上呈现表单(一直在底部)?使用特殊联系页面上的表单,它当然应该仍然呈现该页面。我看到的唯一解决方案是编写单独的控制器方法,但这感觉使它变得比它需要的更复杂。或者我可以以某种方式使用current_page? 方法吗?
更新:我尝试了render current_page?(contact_path) ? 'new' : 'controllername/home',但这产生了错误消息:undefined method 'current_page?'。
根据要求,首页上的表格:
<%= form_for @message, url: contact_path do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= f.text_field :name, placeholder: 'Name' %>
<%= f.email_field :email, placeholder: 'Email' %>
<%= f.text_area :content, placeholder: 'Your message…' %>
<%= f.submit "Post message" %>
<% end %>
单独页面上的表单:
<%= form_for @message, url: contact_path do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= f.label :name %>
<%= f.text_field :name, placeholder: 'Name', class: 'form-control' %>
<%= f.label :email %>
<%= f.email_field :email, placeholder: 'Email', class: 'form-control' %>
<%= f.label :content %>
<%= f.text_area :content, placeholder: 'Your message…', class: 'form-control' %>
<%= f.submit "Send", class: "btn btn-primary" %>
<% end %>
【问题讨论】:
-
你能把你的表格贴出来吗?
-
我在 OP 中添加了表单代码
-
你是问按下提交按钮后,如果提交表单主页,表单应该再次驻留在主页上,如果从那里提交,它应该驻留在特殊联系页面上?
-
是的,就是这样。我基本上是在问如何最有效地做到这一点,所以没有编写完全独立的控制器方法。也许使用类似
current_page?的方法?
标签: ruby-on-rails ruby forms ruby-on-rails-4 controller