2012-04-02 2 views
1

アプリケーションを介してリソースにアクセスし、私は3つのモデル を持ってHAS_MANY通じ、パスヘルパー - ユーザー - - 事務所 - 私は、ユーザーが法律事務所に</p> <p>をたどることが可能なアプリを持っている

class Firm < ActiveRecord::Base 
has_many :follows, :dependent => :destroy 
has_many :users, :through => :follows 

class User < ActiveRecord::Base 
has_many :follows, :dependent => :destroy 
has_many :firms, :through => :follows 

class Follow < ActiveRecord::Base 
belongs_to :firm 
belongs_to :user 

に従ってください私の会社のインデックスビューのテーブル、私は現在の署名を取って、そのユーザーと法律事務所間の関連付けを作成したいと思います。これを行うには効果

- firm.users < <ユーザー(現在の)

これは、あなたが、私はパス、および対応するコントローラを構築することを示唆しているだろうか、私は現時点で持っているコードですか?

<% @firms.each do |firm| %> 
    <tr id = "firm_<%= firm.id %>"> 
    <td><%= link_to image_tag(firm.logo_url, :size => "80x120"), firm.url %></td> 
    <td><%= link_to firm.name, firm_path(firm) %></td> 
    <% if user_signed_in? %><td> 
    <%= button_to 'Follow', ? , method: :post %> 
    </td> 
    <% end %> 

私は、ユーザー認証のための工夫使用していますし、異なるモデルのビューで機能するように部分的に私のログインを許可するアプリケーションヘルパーに次のヘルパーを入れています。

def resource_name 
:user 
end 

def resource_id 
:user_id 
end 

def resource 
@resource ||= User.new 
end 

答えて

0

最も簡単な方法は、FirmsControllerfollow作用を有することであろう。あなたのFirmsController

resources :firms do 
    post :follow, on: :member 
end 

config/routes.rb

def follow 
    @firm.users << current_user 
end 

あなたのビューで:

<%= link_to "Follow", follow_firm_path(@firm), method: :post %> 

もう一つの方法は、特異な資源としてのフォロー関係を表現することです。会社をPOSTにして/firms/1234/followにすると、DELETEリクエストを/firms/1234/followに送信して会社をフォローします。

あなたはそのアプローチを取るしたい場合は、あなたがあなたのconfig/routes.rbでこれを固執したい:

resources :firms do 
    resource :follow, on: :member 
end 

そして、あなたはこのようなFollowsController作成したい:

class FollowsController < ApplicationController 
    def create 
    @firm = Firm.find params[:firm_id] 
    @firm.users << current_user 
    # respond with success 
    end 

    def destroy 
    @firm = Firm.find params[:firm_id] 
    @firm.users.delete current_user 
    # respond with success 
    end 
end 
+0

こんにちはチャーリー、融資のためのおかげで私の手!私はこれらの両方を試しましたが、どちらの場合も、レールはそのおもちゃを追いかける方法の上におもちゃを投げているようです。 経路が一致しません{:action => "follow"、:controller => "firm"} 私はそれを解決すれば教えてください! – RMcNairn

+0

これはレイクルートを入力すると表示されます follow_firm POST /firms/:id/follow(.:format)firm#follow 会社のコントローラでFollowメソッドをどのように定義する必要がありますか? おそらくそれは私の問題ですか? – RMcNairn