我正在尝试向其他用户发送消息。但是当我将一个字段留空时,控制器会呈现另一个“新”动作。
以下是链接到第一个提交的视图代码:
<%= link_to 'Send Mail', {:controller => 'messages', :action => 'new', :recipient_id => @profile.id}, :class => 'btn btn-large btn-primary' %>
以下是#new code:
的消息 def new
@message = Message.new
@recipient = Profile.find(params[:recipient_id])
end
以下是消息#new view code:
<%= simple_form_for @message do |f| %>
<%= f.input :title %>
<%= f.input :body %>
<%= f.input :recipient_id, :as => :hidden, :input_html => {:value => @recipient.id} %>
<%= f.input :sender_id, :as => :hidden, :input_html => {:value => @recipient.id} %>
<%= f.button :submit %>
<% end %>
以下是消息#create code:
def create
@message = Message.new(params[:message])
if @message.save
flash[:notice] = "New message created"
redirect_to @message
else
flash[:error] = "Did not work"
@recipient = params[:recipient_id]
render action: "new"
end
end
如何获取表单中提交的:recipient_id值并传递给渲染新操作?
答案 0 :(得分:2)
当您呈现new
方法栏时,它不会执行代码而只会呈现new
操作的视图(new.html.erb)而您已经生成
一个recipient_id
,足以让您的表单传递参数
试试这个
def create
@message = Message.new(params[:message])
if @message.save
flash[:notice] = "New message created"
redirect_to @message
else
flash[:error] = "Did not work"
@recipient = Profile.find(params[:message][:recipient_id])
render action: "new"
end
end
在呈现new
操作时,我们必须手动创建实例,并在视图中使用。
注意:如果要生成新参数,请使用redirect_to
方法,其中render
使用之前的参数,直到生成新请求