1

Ruby-On-Rails で小さなアプリケーションを開発しています。ビューからコントローラーのメソッドを呼び出したい。このメソッドは、データベース テーブルで一部の挿入のみを実行します。これを行う正しい方法は何ですか?私はこのようなことを試しましたが、どうやらメソッドコードは実行されていません:

<%= link_to 'Join', method: join_event %>
4

2 に答える 2

6

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
于 2012-04-25T00:01:55.903 に答える
4

agmcleod の回答に加えて、次の方法でコントローラー メソッドをビューに公開できますActionController::Base::helper_method

class EventsController < ApplicationController
  helper_method :join_event

  def join_event(event)
    # ...
  end
end

しかし、この場合は、彼のアドバイスに従って、このメソッドをモデル レイヤーに移動するのが最善だと思います。データベースと対話しているためです。

于 2012-04-25T00:48:55.607 に答える