【问题标题】:CREATE AND DELETE The has_many :through Association创建和删除 has_many :through 关联
【发布时间】:2014-06-03 23:46:56
【问题描述】:

我想创建和删除评论

在模型的评论中,我有: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

如何编写创建和删除方法?

谢谢!

非常感谢

我的当务之急是:我想同时保存她的属性,user_id 和 spectacle_id

我会这样做:

定义创建 @user = User.find(params[:id]) @spectacle = Spectacle.find(参数[: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

结束

我的浏览器出现了一些错误:

ReviewsController#create 中的 ActiveRecord::RecordNotFound 找不到没有 ID 的用户

怎么了?

谢谢

【问题讨论】:

  • 你可以做这样的事情 .. User.spectacles.build(#attributes) User.spectacles.create(#attributes) 阅读 ruby​​ on rails .. 你会得到这个东西

标签: ruby-on-rails ruby-on-rails-4


【解决方案1】:

你可以my_user.reviews.build(params).save或直接my_user.reviews.create(params)

要删除评论,您需要这样做my_user.reviews.where(myconditions).delete_allmy_user.reviews.where(mycondition).first.delete

否则,直接从奇观来看是一样的:my_spectacle.reviews.create(params) 等。

您可以在documentation 上找到更多示例

【讨论】:

  • 请看看我在做什么,告诉我哪里出了问题。非常感谢!
  • 就这样吧:@review = @spectacle.reviews.build(review_params)@review.save 如果你做create你不能save它(它已经完成了)。
  • 非常感谢。没关系!
  • 现在我有一些问题:我想用她的评论来形象化一个奇观:/spectacle/1/reviews。我该如何组织工作。谢谢
  • 此 url /spectacle/1/reviews 将在所有评论中搜索 ID 为 1 的奇观。您应该在 reviews_controller 上实现 index 方法。
猜你喜欢
  • 2015-07-31
  • 2012-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-30
  • 2010-12-13
相关资源
最近更新 更多