【发布时间】:2021-02-17 09:00:03
【问题描述】:
这里是新手!
我未能成功提交嵌套模型的表单。
目标:
通过向reviews 模型提交布尔值来验证翻译,以将翻译是否已验证与翻译entry 和user 模型关联的引用相关联。
# 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 实例传递给部分,完美运行
# /entries/index.html.erb
<% @entries.each do |entry| %>
...
<%= render 'reviews/new', entry: entry %>
...
<% end %>
设置新/创建表单失败。
发生的情况是entry 实例很受欢迎,但我未能为属于entry 的review 创建新模型实例。
entry.review 为 review 引发 nil 错误,而 entry 在通过浏览器控制台进行测试时很好
表单中的第一个参数不能包含 nil 或为空
# reviews/_new.html.erb
<span>
<%= form_for entry.review do |f| %>
<div class="form-check form-switch">
<%= f.check_box :verified, class: "form-check-input" %>
</div>
<%= f.submit class: "btn btn-primary"%>
<% end %>
</span>
另一种尝试也是仅使用控制器中的@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
我想在entries_controller 中执行我的操作吗?
我还发现教程 here 很有用,但复制失败。
另一个 StackOverflow 参考 here
我仍然收到错误 entry.review.build 评论为零。
表单中的第一个参数不能包含 nil 或为空
【问题讨论】:
标签: ruby erb ruby-on-rails-6