0

別のユーザーにメッセージを送信しようとしています。しかし、フィールドを空白のままにすると、コントローラーは別の「新しい」アクションをレンダリングします。

最初の送信にリンクするビュー コードは次のとおりです。

    <%= link_to 'Send Mail', {:controller => 'messages', :action => 'new', :recipient_id => @profile.id}, :class => 'btn btn-large btn-primary' %>

メッセージ#新しいコードは次のとおりです。

  def new
  @message = Message.new

  @recipient = Profile.find(params[:recipient_id])

end

メッセージ#新しいビュー コードは次のとおりです。

<%= 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 %>

メッセージ#作成コードは次のとおりです。

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 値を取得し、render new アクションに渡すにはどうすればよいですか?

4

1 に答える 1

2

メソッドレールをレンダリングするとコードが実行されず、代わりにアクションnewのビュー(new.html.erb)がレンダリングされるだけで、フォームがパラメーターを渡すのに十分なnewrecipient_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使用します。新しいリクエストが生成されるまで、以前のパラメーターを使用します

于 2012-12-26T06:15:52.420 に答える