1

別のコントローラーのアクションの一部として保存できるように、suggestion_idパラメーターを経由して渡します。link_tocreate

<%= link_to "I'm interested", new_interested_path(:controller => :interested, 
    :suggestion_id => suggestion.id, :method => :get), :class => 'btn btn-mini' %>

結果のURLは次のとおりです。

http://localhost:3000/interesteds/new?controller=interested&method=get&suggestion_id=1

これによると、次のコードを使用suggestion_idして、この他のコントローラーの作成アクションのパラメーターにアクセスできるはずです。

@interested.suggestion_id = params[:suggestion_id]

ただし、これは正しくありません。「関心のある」オブジェクトが作成されるときはいつでも、suggestion_idはnilです。何が得られ、なぜこれに役立つドキュメントが見つからないのですか?そして、私もすでにそれをしているので、ここを見るように私に言わないでください。あまり役に立ちませんでした。

4

1 に答える 1

1

おそらく、次のように試してください。

<%= link_to "I'm interested", new_interested_path(:suggestion_id => suggestion.id), :method => :get, :class => 'btn btn-mini' %>

このnew_interested_pathメソッドは、「関心のある」リソースを使用していることをすでに示しているため、コントローラー名を渡す必要はありません(渡す必要はありません)。また、メソッドをURLの一部にする必要はありません。これは、httpメソッドです。 URLにリクエストを送信するときに使用します。

ゼロであることに関するあなたのポイントはsuggestion_id、あなたが何をしようとしているのかによります。あなたの場合、あなたはcreateアクションにアクセスしているのではなく、newフォームレンダリングのためにオブジェクトを初期化するために使用できるアクションにアクセスしています。送信時にアクションにsuggestion_id渡されるようにするには、ビューテンプレートに、その属性を割り当てるフィールド(場合によっては非表示のフィールド)が必要です。次のようになります。createnew.html.erb

form_for @interested, interesteds_path do |f|
  ... # other fields
  f.hidden_field :suggestion_id
  f.submit
end

このフォームが送信されると、params[:interested]入力されたすべてのフィールド(を含むsuggestion_id)の値が含まれ、新しいActiveRecordオブジェクトを構築および作成するために使用できます。

コントローラのアクションは次のようになります。

def new
  @interested = Interested.new(:suggestion_id => params[:suggestion_id])
end

def create
  @interested = Interested.new(params[:interested])
  if @interested.save
    # do something
  else
    # alert user
  end
end
于 2012-10-16T13:26:50.203 に答える