0

所以基本上我有一个 Book 模型,其中包含如下信息

  • 书名(字符串)
  • 作者(字符串)
  • 说明(文字)
  • 等等

现在在前端我添加了动态添加更多作者字段的功能。在我命名的表单中book[coauthor],所以如果我添加第二个作者,我会有一个字段book[coauthor][name_0]

我想要实现的是将book[author]所有内容合并book[coauthor][name_i]为一个大字符串,并将每个名称用,. (即,book[author]作为“爱丽丝”和book[coauthor][name_0]“鲍勃”,我应该将“爱丽丝,鲍勃”保存book[author]在数据库中)

第一个问题:此时使用 Javascript 还是使用 Rails(在控制器中)更好?

第二个问题:目前我正在 Rails 控制器中执行此操作,但得到了Can't mass-assign protected attribute 'coauthor'. 但是我不想让它成为一个真正的属性,因为我只需要在将所有信息保存到author字段之前进行一些处理。我应该怎么办?

多谢你们。

4

2 回答 2

0

对于第一个问题:我没有看到任何令人信服的理由。JavaScript 可能会提供更多“实时”验证/修复该字段格式的能力,但我不确定这是否特别重要。

对于第二个问题:您无需将某物设为真实属性即可使其可访问。您可能已coauthor使用 将其创建为虚拟属性attr_accessor,但这不会自动将其添加到批量分配白名单中。为此,还将其添加到您的attr_accessible列表中。

于 2013-01-25T20:22:38.967 回答
0

第一个问题有点牵强,你可能会遇到一些激烈的分歧,但我的看法是这样的。不是每个人都在启用 Javascript 的情况下运行,所以我确保我有办法通过 Rails 自己完成所有工作。

在这种情况下,它实际上很容易。

我建议的第一件事是不要将共同作者作为params[:book]. 相反,将它们作为params[:coauthors]. 然后在你的控制器中你可以这样做:

@book = Book.new(params[:book])
@book.author = ([@book.author] + [params[:coauthors]]).join(",")
@book.save

实际上,更新 params[:book][:author] 可能会更好,因为这对create和都有效update。无论哪种方式,我希望这会有所帮助。

于 2013-01-25T20:29:09.700 回答