我已经在railstutorial.org网站上创建了自己的应用程序,现在我正在chapter 11。一切都很好,我从这个教程中学到了很多,现在我继续在我的应用程序上工作,我实际上在模型“艺术家”,每个用户都可以创建新的艺术家ex.Michael Hartl;)并添加他们最受欢迎报价。问题是允许用户关注他们喜爱的艺术家并在Feed中查看报价,就像来自railstutorial的Microposts feed一样。艺术家和用户是两种不同的模型,并且railstutorial不解释如何制作“跟随系统”。这就像订阅YouTube等频道一样 有人可以解释我如何让这个工作?我必须在代码中改变什么?
答案:
按钮:
<%= form_for(current_user.userartists.build(followed_id: @artist.id)) do |f| %>
<div><%= f.hidden_field :followed_id %></div>
<%= f.submit "Follow", class: "btn btn-large btn-primary" %>
<% end %>
控制器
class UserartistsController < ApplicationController def create @artist = Artist.find(params[:userartist][:followed_id]) current_user.follow!(@artist) respond_to do |format| format.html { redirect_to @artist } format.js end end end
答案 0 :(得分:0)
您应该设置一个艺术家模型和一个名为UserArtist
(或UserFollowsArtist
)的中间模型,您将在其中存储用户和艺术家之间的所有匹配。
class User < ActiveRecord::Base
has_many :user_artists
has_many :artists, :through => :user_artists
end
class Artist < ActiveRecord::Base
has_many :user_artists
has_many :users, :through => :user_artists
end
class UserArtist < ActiveRecord::Base
belongs_to :user
belongs_to :artist
end
现在,您可以致电@user = User.first
以获取第一位用户,并@user.artists
获取@user
所关注的艺术家列表。
您必须创建一个名为UserArtistsController
的单独控制器,您将在其中执行操作create
,并可能destroy
(如果用户希望取消关注艺术家)。
在routes.rb
:
resources :user_artists, :only => [:create, :destroy]
我想follow button
会出现在Artists
展示页面上,所以你应该在视图中看到这样的内容:
<%= button_to "Follow artist", {:controller => :user_artists,
:action => 'create', :artist_id => params[:id] }, :method => :post %>
在你的控制器中:
class UserArtistsController < ActionController
def create
@user_artist = UserArtist.create(:user_id => current_user.id, :artist_id => params[:artist_id])
@artist = Artist.find(params[:artist_id])
if @user_artist.save
redirect_to @artist
else
flash[:alert] = "Something went wrong, please try again"
redirect_to root_path
end
end
end
不要忘记为Artist
和UserArtist
创建迁移。 UserArtist
表应包含user_id
和artist_id
。