16

初心者から少し質問がありました。ビューからコントローラーに変数を渡そうとしています。とにかく、コントローラーのメソッドがビューから変数を受け取ることができますか?

Post view: show.html.erb:
....
<%=link_to "Add relationship", :method => :add_relationship(@rela) %>

Controller: post.controller.rb:

 def add_relationship(rela)
  @post = Post.find(params[:id])

  if current_user.id == @post.user_id
    @post.rel_current_id = rela.id
    @post.save
    redirect_to relationships_url
  else
    redirect_to posts_url, :notice => "FY!"
  end
end

前もって感謝します :)

4

2 に答える 2

29

link_toを介してparamsハッシュに情報を追加できます。あなたが何をしようとしているのか正確にはわかりませんが、最近、新しいメールにリンクするときに必要な種類のメールを追加するために、このようなことをしました

<%= link_to 'Send Thanks', new_invoice_email_path(@invoice, :type => "thanks") %>

今私のパラメータは次のようになります:

{"type"=>"thanks", "action"=>"new", "controller"=>"emails", "invoice_id"=>"17"}

パラメータを介してタイプにアクセスできます

email_type = params[:type]

文字列の代わりに、インスタンス変数@relaを渡すと、paramsハッシュでobject_idを取得します。

以下のコメントに従って、パスnew_invoice_email_pathが機能する理由を示すためにルートを追加しています。

resources :invoices do
  resources :emails
end
于 2012-12-02T19:35:39.233 に答える
2

リクエストが届くと、コントローラー(およびすべてのモデル呼び出し)が最初に処理され、次にビューコードが最後に処理されます。ビューはヘルパーのメソッドを呼び出すことができますが、コントローラーで関数を参照することはできません。

ただし、ページがレンダリングされると、新しいリクエストの一部として情報をコントローラーにポストバックするか、ajax / JQuery(など)を使用してコントローラー関数をリモートで呼び出すことができます。

それは役に立ちますか?

于 2012-12-02T18:29:47.333 に答える