私はRuby-On-Railsで小さなアプリケーションを開発しています。私はビューからコントローラのメソッドを呼びたいと思います。このメソッドは、データベーステーブルにいくつかの挿入だけを実行します。これを行う正しい方法は何ですか?私はこのような何かを試してみたが、どうやらメソッドのコードが実行されません。ビューからコントローラのメソッドを呼び出す方法は?
<%= link_to 'Join', method: join_event %>
私はRuby-On-Railsで小さなアプリケーションを開発しています。私はビューからコントローラのメソッドを呼びたいと思います。このメソッドは、データベーステーブルにいくつかの挿入だけを実行します。これを行う正しい方法は何ですか?私はこのような何かを試してみたが、どうやらメソッドのコードが実行されません。ビューからコントローラのメソッドを呼び出す方法は?
<%= link_to 'Join', method: join_event %>
のlink_toメソッド呼び出しのメソッドのオプションは、実際にはHTTPメソッドではなく、アクションの名前です。 RESTfulルーティングはDELETEメソッドを使用して破棄アクションを実行するため、HTTP Deleteオプションを渡すときに便利です。
あなたがここで行う必要があるのは、あなたの行動のためのルートです。あなたのroutes.rbをに以下を追加し、それはjoin_event
と呼ばれると仮定すると:
match '/join_event' => 'controllername#join_event', :as => 'join_event'
は、使用しているコントローラの名前にコントローラ名を変更してください。次のように次に、あなたのビューを更新します。
<%= link_to 'Join', join_event_path %>
_path方法は、生成されたルート・ファイル内としての価値に基づいています。
コードを整理するには、挿入を静的モデルメソッドにカプセル化することが必要な場合があります。名前欄にMyModel
と呼ばれるモデルを持っているのであれば、あなたは何ができる
class MyModel
# ...
def self.insert_examples
MyModel.create(:name => "test")
MyModel.create(:name => "test2")
MyModel.create(:name => "test3")
end
end
それからちょうど経由して、あなたの行動でそれを実行します。agmcleodの答えに加えて
MyModel.insert_examples
、あなたは、コントローラのメソッドを公開することができます
class EventsController < ApplicationController
helper_method :join_event
def join_event(event)
# ...
end
end
しかし、それはINTEですので、この場合には、私は、あなたが彼の助言に従い、モデル層にこの方法を動かしオフ最善だと思う:ActionController::Base::helper_method
とビューへデータベースとの競争。
ご返信ありがとうございます。非常に役に立ちました:)ボタンにフォームを表示させ、フォームフィールドに基づいてデータベースに挿入を実行するにはどうすればよいですか? – notGeek
ユーザー入力を受け入れる場合は、a)モデルを設定し、b)そのモデルのデータベース移行を実行し、c)コントローラとビューを設定してそれをサポートするように設定します。私は実際にあなたがスタートガイドを辿ることをお勧めします:http://guides.rubyonrails.org/getting_started.html#getting-up-and-running-quickly-with-scaffolding、これらのステップのいくつかを記載しています。おそらく本に投資したいのであれば、Rails 3 in Actionをチェックしてください。 – agmcleod