简体   繁体   English

创建并删除has_many:through关联

[英]CREATE AND DELETE The has_many :through Association

I want to create and delete reviews 我想创建和删除评论

In the model's review I have: user_id , spectacle_id , content and rating . 在模型的审查中,我有: user_idspectacle_idcontentrating

# Spectacle.rb
class Spectacle < ActiveRecord::Base
  has_many :reviews , dependent: :destroy
  has_many :users, through: :reviews
end

# User.rb
class User < ActiveRecord::Base
  has_many :reviews , dependent: :destroy
  has_many :spectacles, through: :reviews
end

# Review.rb
class Review < ActiveRecord::Base
  belongs_to :spectacle 
  belongs_to :user
end

How can I write methods create and delete? 如何编写创建和删除方法?

Thank you! 谢谢!

Thank you very much 非常感谢你

My preoccupation is: i want to save in model review at the same time her attributes, user_id and spectacle_id 我的重点是:我想同时在模型审查中保存她的属性user_id和spectacle_id

I do something like this: 我做这样的事情:

def create @user = User.find(params[:id]) @spectacle = Spectacle.find(params[:id]) @user.reviews.create(user_id: @user.id) def创建@user = User.find(params [:id])@spectacle = Spectacle.find(params [:id])@ user.reviews.create(user_id:@ user.id)

@spectacle.reviews.create(spectacle_id: @spectacle.id)
@review = Review.new(review_params)
if @review.save
  flash[:success] = "Review created!"
  redirect_to :root
else
  render 'home'
end

end 结束

and i have some error on my browser: 而且我的浏览器出现一些错误:

ActiveRecord::RecordNotFound in ReviewsController#create Couldn't find User without an ID ReviewsController#create中的ActiveRecord :: RecordNotFound找不到没有ID的用户

What is wrong? 怎么了?

Thank you 谢谢

You can do my_user.reviews.build(params).save or directly my_user.reviews.create(params) . 您可以执行my_user.reviews.build(params).save或直接执行my_user.reviews.create(params)

To delete a review, you need to do like this my_user.reviews.where(myconditions).delete_all or my_user.reviews.where(mycondition).first.delete . 要删除评论,您需要执行以下操作my_user.reviews.where(myconditions).delete_allmy_user.reviews.where(mycondition).first.delete

Else, directly from the spectacle it's same: my_spectacle.reviews.create(params) etc. 另外,直接从眼镜是一样的: my_spectacle.reviews.create(params)等。

You can find more examples on the documentation 您可以在文档中找到更多示例

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM