我需要帮助在Rails 4.1中修复这种关系,
用户模型关系
has_and_belongs_to_many :blogs, join_table: 'blogs_users'
has_many :posts, through: :blogs
博客模型关系
has_many :posts
发布模型关系
belongs_to :blog
belongs_to :user
问题?
以下rails c
中的工作原理 - 如何传入用户ID:
User.find_by_x(x).blogs.find_by_x(x).post.create(x)
该帖子是为附加过该博客的用户创建的,但由于此类链接的工作方式,只有blog_id
传递给帖子而不是user_id
我的关键博客和用户ID。
所以我想,为什么不通过用户对象创建帖子并传入博客ID。
User.find_by_x(x).posts.create(x, blog_id: y) # Where y represents a blog the user is associated with.
嗯,这一切都很好,并且我接受了这个错误:
ActiveRecord::HasManyThroughNestedAssociationsAreReadonly: Cannot modify association 'User#posts' because it goes through more than one other association.
我认为问题在于我有一个联接表,我说has_many :posts, through: blogs
大多数人可能会认为"只需删除直通部分。"我怎么需要这种类型的关系,用户可以拥有许多博客和博客可以属于许多用户,帖子属于博客和用户,但用户可以有很多帖子....
有没有办法解决这个问题,以保持我的观念或......
答案 0 :(得分:0)
你创建帖子的方式没有多大意义。
这是通常的做法:
blog = current_user.blogs.find(params[:blog_id])
post = blog.posts.create(params[:post])
respond_with(post)
答案 1 :(得分:-1)
这个问题的正确解决方案有两个方面,我需要确保博客和用户之间的关系与用户和博客相同,所以在我添加的博客模型中:
has_and_belongs_to_many :users, join_table: 'blogs_users'
然后我需要在帖子级别创建帖子,而不是用户级别。因此,我需要@user.posts.create()
而不是@ user.posts,而不是Post.create(blog_id: x, user_id: x)
将正常工作(假设用户有2个博客,每个博客都有一个帖子,你会收回这两个帖子)