web-dev-qa-db-ja.com

ビューからコントローラーにパラメーターを渡す

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

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

前もって感謝します :)

13
OXp1845

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

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

今私のparamsは次のようになります:

{"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
27
Steve

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

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

それは役に立ちますか?

2
Chris Lewis