初心者の質問が少しありました。ビューからコントローラーに変数を渡そうとしています。とにかく私のコントローラーの私のメソッドは私のビューから変数を受け取ることができますか?
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
前もって感謝します :)
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
リクエストが届くと、コントローラー(およびモデル呼び出し)が最初に処理され、次にビューコードが最後に処理されます。ビューはヘルパーのメソッドを呼び出すことができますが、コントローラーで関数を参照することはできません。
ただし、ページがレンダリングされたら、新しいリクエストの一部としてコントローラーに情報をポストバックするか、ajax/JQuery(など)を使用してコントローラーの関数をリモートで呼び出すことができます。
それは役に立ちますか?