我使用Public Activity gem在我的应用上创建活动流。为此,我有这个设置。
我为我的应用设置了友情模型,
create_table "friendships", force: :cascade do |t|
t.integer "user_id"
t.integer "friend_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
模型看起来像这样,
belongs_to :user
belongs_to :friend, :class_name => "User"
这是我的用户模型,
has_many :friendships
has_many :friends, :through => :friendships
has_many :inverse_friendships, :class_name => "Friendship", :foreign_key => "friend_id"
has_many :inverse_friends, :through => :inverse_friendships, :source => :user
我用Public Activity gem跟踪了我的电影模型,
include PublicActivity::Model
tracked owner: -> (controller, model) { controller && controller.current_user }
tracked recipient: -> (controller, model) { controller && controller.current_user.friends }
tracked :params => {
:title => :get_title,
:poster => :get_poster
}
has_and_belongs_to_many :users
当我添加新电影,从而创建新活动时,我在rails控制台中收到此错误,
NoMethodError(未定义的方法
primary_key' for User::ActiveRecord_Associations_CollectionProxy:Class): app/controllers/movies_controller.rb:19:in
创建'
这指的是我在movies_controller中创建def,
def create
@movie = Movie.find_or_create_by movie_params
current_user.movies << @movie
redirect_to :root
end
这里出了什么问题?
*根据要求提供电影参数*
private
def movie_params
params.require(:movie).permit(
:title,
:image,
:imdb_rating,
:release_date,
:movie_id,
:backdrop
)
end
答案 0 :(得分:1)
好的,找到了!你的问题在这里:
tracked recipient: -> (controller, model) { controller && controller.current_user.friends }
我认为tracked
方法要求提供模型记录(或无),但您的controller.current_user.friends
会返回关联,因此它没有primary_key
。您可以将其更改为controller.current_user.friends.try(:first)
以进行验证。