現在、1 つにまとめたい 3 つのメソッドがあります。
def send_email(contact,email)
end
def make_call(contact, call)
return link_to "Call", new_contact_call_path(:contact => contact, :call => call, :status => 'called')
end
def make_letter(contact, letter)
return link_to "Letter", new_contact_letter_path(:contact => contact, :letter => letter, :status => 'mailed')
end
モデルをパラメーターの 1 つとして渡すだけで、正しく path_to を作成できるように、3 つを 1 つにまとめたいと考えています。私は次のようにこれをやろうとしていますが、立ち往生しています:
def do_event(contact, call_or_email_or_letter)
model_name = call_or_email_or_letter.class.name.tableize.singularize
link_to "#{model_name.camelize}", new_contact_#{model_name}_path(contact, call_or_email_or_letter)"
end
ここでの回答のおかげで、私は次のことを試しました。
link_to( "#{model_name.camelize}", send("new_contact_#{model_name}_path",
:contact => contact,
:status => "done",
:model_name => model_name) )
しかし、:attribute の場合に #{model_name} を貼り付けてから、model_name の値を文字列としてではなく、オブジェクトを参照して送信する方法がわかりません。
私はこれを機能させました: -彼が私を正しい方向に導いたので、カダダにポイントを与えました:)
def do_event(contact, call_or_email_or_letter)
model_name = call_or_email_or_letter.class.name.tableize.singularize
link_to( "#{model_name.camelize}", send("new_contact_#{model_name}_path",
:contact => contact,
:status => 'done',
:"#{model_name}" => call_or_email_or_letter ) )
end