【问题标题】:How do you use 'create!' with strong_params?您如何使用“创建!”与strong_params?
【发布时间】:2013-08-08 15:38:16
【问题描述】:

好的,所以在安装strong_params 之前,使用MyBook.create! 可以,但现在不行了。

这是我的代码

class AuthorsController < ApplicationController
  def new
    @author = user.authors.build
  end

  def create
    @author = Author.new(author_params)
    if @author.save
      @book = MyBook.create!(:author_id => @author.id,
          :user_id => @author.user_id)
        )
   else
     render :new
  end
end

我试过了

@book = MyBook.create!(params.require(:my_book).permit(
          :author_id => @author.id,
              :user_id => @author.user_id)
        )

但我收到Required parameter missing: my_book

我做错了什么?我可以一个一个地更新每个属性,但这似乎效率不高。我知道我不能批量分配受保护的属性,但不必在我的模型中分配属性(因为 strong_params),我不明白如何让它工作。

提前谢谢你

【问题讨论】:

  • 你的创建不起作用,因为你没有先.save你的@author对象,所以它没有id。使用@author = Author.create(author_params) 而不是新的
  • @MrYoshiji 抱歉,我实际上是在保存作者并忘记将其包含在其中。我刚刚编辑了它

标签: ruby-on-rails strong-parameters


【解决方案1】:

所以之前,您并没有真正使用参数

@book = MyBook.create!(:author_id => @author.id,
      :user_id => @author.user_id)
    )

如果您以“批量分配”的方式使用参数,它看起来像:

@book = MyBook.create!(params[:book])

由于你是自己提取id,所以更容易做到:

@book = MyBook.create! do |mybook|
  mybook.author_id = @author.id
  mybook.user_id =  @author.user_id
end

【讨论】:

  • 是的,我不能使用@book = MyBook.create!(params[:book]),因为所有外键都返回为零。您的解决方案有效,但我只是想知道您是否有更好的方法来做到这一点,或者这个解决方案是否很好?谢谢顺便说一句
  • 您可能应该接受 MyBook (api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/…) 中 Author 的嵌套属性,这样 MyBook.create!(params[:book]) 将处理所有事情。
猜你喜欢
  • 1970-01-01
  • 2017-09-06
  • 1970-01-01
  • 2014-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多