如何将表单中提交的变量传递给“新”操作

时间:2012-12-26 05:02:29

标签: ruby-on-rails-3

我正在尝试向其他用户发送消息。但是当我将一个字段留空时,控制器会呈现另一个“新”动作。

以下是链接到第一个提交的视图代码:

    <%= 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值并传递给渲染新操作?

1 个答案:

答案 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使用之前的参数,直到生成新请求