Ruby 如何从局部Rails创建嵌套模型6
这里是新手 我尝试提交嵌套模型的表单失败 目标: 通过向Ruby 如何从局部Rails创建嵌套模型6,ruby,erb,ruby-on-rails-6,Ruby,Erb,Ruby On Rails 6,这里是新手 我尝试提交嵌套模型的表单失败 目标: 通过向审阅模型提交布尔值来验证翻译,以关联翻译是否已验证,以及翻译条目和用户模型关联的引用 # routes.rb resources :entries do resources :reviews end # entry.rb belongs_to :user has_one :review accepts_nested_attributes_for :review # user.rb has_many :entries has_m
审阅
模型提交布尔值来验证翻译,以关联翻译是否已验证,以及翻译条目
和用户
模型关联的引用
# routes.rb
resources :entries do
resources :reviews
end
# entry.rb
belongs_to :user
has_one :review
accepts_nested_attributes_for :review
# user.rb
has_many :entries
has_many :reviews
# review.rb
belongs_to :user
belongs_to :entry
从entry
索引,将entry
实例传递给partial,工作正常
# /entries/index.html.erb
<% @entries.each do |entry| %>
...
<%= render 'reviews/new', entry: entry %>
...
<% end %>
另一种尝试是仅使用控制器的@review
,但不遵守嵌套路由
我的控制器看起来像这样
# reviews_controller.rb
def create
@entry = Entry.find(params[:entry_id])
@review = @entry.review.build(review_params)
@review.user_id = current_user.id
@review.save
end
private
def review_params
params.require(:review).permit(:verified, user: current_user, entry: @entry)
end
我是否要在控制器的条目中执行我的操作
我还发现教程很有用,但复制失败
另一个StackOverflow引用
我仍然得到错误条目。review.build
该review为零
表单中的第一个参数不能包含nil或为空
在上构建关联记录时,有一个关系,而不是
@review=entry.review.build(review\u参数)
您需要使用以下各项:
@review=entry.build\u review(review\u参数)
有关更多详细信息,请参阅
我是否应该在控制器中执行我的操作
这取决于你在追求什么。如果您有一个用于添加新审阅的专用表单,并且它没有嵌入到另一个表单中用于创建或更新条目,那么在ReviewsController
中执行create
操作是一个简单的解决方案–在这种情况下,您也不需要在中为接受嵌套的属性条目
但是,如果您希望能够使用相同的表单创建或更新条目及其审阅,则应将审阅表单嵌套在条目的表单中,保持接受
的嵌套属性,并使用EntriesController
中的操作。你应该从这里开始。啊,非常感谢<代码>构建审查
已工作
# reviews_controller.rb
def create
@entry = Entry.find(params[:entry_id])
@review = @entry.review.build(review_params)
@review.user_id = current_user.id
@review.save
end
private
def review_params
params.require(:review).permit(:verified, user: current_user, entry: @entry)
end