【问题标题】:How to create nested model from partial Rails 6如何从部分 Rails 6 创建嵌套模型
【发布时间】:2021-02-17 09:00:03
【问题描述】:

这里是新手!

我未能成功提交嵌套模型的表单。

目标:

通过向reviews 模型提交布尔值来验证翻译,以将翻译是否已验证与翻译entryuser 模型关联的引用相关联。

# 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 实例很受欢迎,但我未能为属于entryreview 创建新模型实例。

entry.reviewreview 引发 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


    【解决方案1】:

    has_one 关系上构建关联记录时,而不是

    @review = entry.review.build(review_params)
    

    您需要使用以下内容:

    @review = entry.build_review(review_params)
    

    有关详细信息,请参阅documentation

    我想在 entry_controller 中实现我的操作吗?

    这取决于你追求什么。如果您有一个用于添加新评论的专用表单,并且它没有嵌入到另一个用于创建或更新条目的表单中,那么在 ReviewsController 中实施 create 操作是直接的解决方案——在这种情况下,您也不应该需要 @ 987654328@Entry

    但是,如果您希望能够使用相同的表单创建或更新条目以及其评论,那么您应该将评论表单嵌套在条目的形式,保留accepts_nested_attributes_for,并使用EntriesController中的操作。 documentation 应该让您从那里开始。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-25
      • 2011-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多