Has_many通过和路径助手 - 通过应用程序访问资源

时间:2012-04-02 11:44:47

标签: ruby-on-rails activerecord has-many-through

我有一个应用程序,用户可以关注律师事务所

我有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&lt;&lt;用户(当前)

这是我目前的代码,您如何建议我构建路径,以及相应的控制器?

<% @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

1 个答案:

答案 0 :(得分: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 /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