Ruby-On-Rails で小さなアプリケーションを開発しています。ビューからコントローラーのメソッドを呼び出したい。このメソッドは、データベース テーブルで一部の挿入のみを実行します。これを行う正しい方法は何ですか?私はこのようなことを試しましたが、どうやらメソッドコードは実行されていません:
<%= link_to 'Join', method: join_event %>
Ruby-On-Rails で小さなアプリケーションを開発しています。ビューからコントローラーのメソッドを呼び出したい。このメソッドは、データベース テーブルで一部の挿入のみを実行します。これを行う正しい方法は何ですか?私はこのようなことを試しましたが、どうやらメソッドコードは実行されていません:
<%= link_to 'Join', method: join_event %>
link_to メソッド呼び出しの method オプションは、実際には HTTP メソッドであり、アクションの名前ではありません。RESTful ルーティングは DELETE メソッドを使用して破棄アクションを実行するため、HTTP 削除オプションを渡す場合に役立ちます。
ここで行う必要があるのは、アクションのルートを設定することです。という名前であると仮定しjoin_event
て、routes.rb に以下を追加します。
match '/join_event' => 'controllername#join_event', :as => 'join_event'
controllername は、使用しているコントローラーの名前に変更してください。次に、ビューを次のように更新します。
<%= link_to 'Join', join_event_path %>
_path メソッドは、routes ファイルの as 値に基づいて生成されます。
コードを整理するために、挿入を静的モデル メソッドにカプセル化することができます。したがってMyModel
、名前列で呼び出されるモデルがある場合は、次のことができます
class MyModel
# ...
def self.insert_examples
MyModel.create(:name => "test")
MyModel.create(:name => "test2")
MyModel.create(:name => "test3")
end
end
次に、次の方法でアクションで実行します。
MyModel.insert_examples
agmcleod の回答に加えて、次の方法でコントローラー メソッドをビューに公開できますActionController::Base::helper_method
。
class EventsController < ApplicationController
helper_method :join_event
def join_event(event)
# ...
end
end
しかし、この場合は、彼のアドバイスに従って、このメソッドをモデル レイヤーに移動するのが最善だと思います。データベースと対話しているためです。