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