我正在尝试发送消息给另一个用户。但是当我留下一个空白字段时,控制器会呈现另一个'new'动作。
下面是链接到第一个提交的视图代码: <%= 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值提交的形式和传递到渲染新动作?
当您呈现new
方法时,rails不会执行它的代码,而是只呈现您已经生成的new
动作的视图(new.html. erbb)recipient_id
足以让您的表单传递参数
Try this
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
使用以前的参数,直到一个新的请求生成