我有一个应用程序,用户可以关注律师事务所
我有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
答案 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