2012-04-24 31 views
1

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

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

答えて

5

の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 
+0

ご返信ありがとうございます。非常に役に立ちました:)ボタンにフォームを表示させ、フォームフィールドに基づいてデータベースに挿入を実行するにはどうすればよいですか? – notGeek

+0

ユーザー入力を受け入れる場合は、a)モデルを設定し、b)そのモデルのデータベース移行を実行し、c)コントローラとビューを設定してそれをサポートするように設定します。私は実際にあなたがスタートガイドを辿ることをお勧めします:http://guides.rubyonrails.org/getting_started.html#getting-up-and-running-quickly-with-scaffolding、これらのステップのいくつかを記載しています。おそらく本に投資したいのであれば、Rails 3 in Actionをチェックしてください。 – agmcleod

4

、あなたは、コントローラのメソッドを公開することができます

class EventsController < ApplicationController 
    helper_method :join_event 

    def join_event(event) 
    # ... 
    end 
end 

しかし、それはINTEですので、この場合には、私は、あなたが彼の助言に従い、モデル層にこの方法を動かしオフ最善だと思う:ActionController::Base::helper_methodとビューへデータベースとの競争。

+0

本当にこれをしないでください。あなたはコントローラのメソッドについて知っておくことが多かれ少なかれ、それ以外は何もできません。 – agmcleod

+2

@agmcleod私は同意しません。セッションデータに依存する 'logged_in?'コントローラメソッドは、ビューレイヤで非常に便利です。ほとんどの場合と同じように、あなたはそれをいつ使うべきか、それをいつ乱用するかを知る必要があります:-) – Brandan

関連する問題