0

我使用脚手架生成器来创建围绕“自动”资源的 CRUD。手册资源只包含一个“name”列、一个字符串,当然还有一个“id”列、一个整数。

我还手动创建了面向“手动”资源的 CRUD。手动资源与自动资源具有相同的模式。我为手动创建的控制器操作创建了逻辑路由。

我无法理解的是如何使用与资源列名称相关的键填充新资源实例。

这是在自动资源中创建新行所必需的脚手架生成的操作:

  def new
    @automatic = Automatic.new
  end

views/automatic/new我创建了一个 erb 标签来观察资源实例:

<%= debug @automatic %>

这是它打印到屏幕上的内容:

--- !ruby/object:Automatic
attributes:
  id: 
  name: 

正如我所怀疑的那样。

这是在手动资源中创建新行所需的手动创建操作:

 def new
    @manual= Manual.new
 end

views/manual/new我创建了一个 erb 标签来观察资源实例:

<%= debug @manual %>

这是它打印到屏幕上的内容:

--- 
...

完全空了!尝试更新名称列会导致ActiveModel::ForbiddenAttributesError in FeaturesController#create错误?模型是相同的,答案必须在于密钥没有填充到我的手动资源实例中。

为什么不?我不明白。它们的 MVC 路径是相同的。

这完美地工作:

@automatic = Automatic.new

这根本不起作用:

@manual = Manual.new

为什么?

4

1 回答 1

0

我不相信这一点。我不得不关闭并重新打开 rails 服务器。每当服务器启动时,解释器必须将资源列名称保存在某处,并在创建新实例时使用这些名称。

这是一个很好的链接,而不是解释这个概念: link

说真的,rails 4.0 还有一个巨大的陷阱。您现在需要将控制器中的所有新动态资源方法列入白名单。这里:

   def album_params
      params.require(:album).permit(:title, :artist, :release_date, :genre)
   end

假设您在这里正确创建了一个名为 artist_id 的新列,并实现了必要的 CRUD!它仍然不会在 Rails 4 中创建。您需要将其作为符号显式添加到上面的.permit方法中:artist_id

有点烦人,但我相信这是为了我们好:)

于 2013-09-23T05:26:37.047 回答