2012-04-02 4 views
1

У меня есть приложение, в котором пользователи могут последовать юридические фирмыHAS_MANY через и вспомогательный путь - доступ к ресурсам через приложение

У меня есть 3 модели - Пользователь - Фирма - Следуйте

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

Самый простой способ будет иметь follow действие на FirmsController.

В config/routes.rb:

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

В вашем FirmsController:

def follow 
    @firm.users << current_user 
end 

На ваш взгляд:

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

Другой способ будет представлять собой отношения проследите, как сингулярного ресурса. Вы должны следовать фирме POST ing до /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 => "фирмы"} Я сообщу, если я его решить! – RMcNairn

+0

Это происходит, когда я печатаю рейк-маршруты follow_firm POST /firms/:id/follow(.форматы) фирмы # следуют как я должен определять метод follow в контроллере фирм? возможно, это моя проблема? – RMcNairn

Смежные вопросы