我在我的Rails 5项目中设置了Sphinx搜索引擎,它(可能)打破了Rails accepts_nested_attributes_for 方法。至少 accepts_nested_attributes_for 方法只有在 Gemfile 中设置这些行时才有效:
gem 'mysql2', '~> 0.3.18', :platform => :ruby
gem 'thinking-sphinx', '~> 3.2.0'
如果没有这些行 accepts_nested_attributes_for 不起作用! “不起作用”意味着嵌套模型不是通过父创建表单创建的(我得到错误:
1错误禁止此用户被保存:文章用户必须 存在
)
我将我的项目上传到Heroku,问题也发生在那里 - 完全相同(即使Heroku不支持Sphinx免费)。
这是我在GitHub上的测试项目:https://github.com/dorelly2/test-project。这仅仅是一个脚手架生成的测试项目。
我制作了2个Heroku应用程序,它们演示了不同的行为,这取决于Gemfile中是否注释掉了2行(如上所述)。你可以和他们玩,看看。尝试在两个应用中创建Name
和Article title
的用户,您会看到差异:
https://test-project-ts.herokuapp.com/
https://test-project-ts-bad.herokuapp.com/
以下是代码示例:
class User < ApplicationRecord
has_many :articles, dependent: :destroy
accepts_nested_attributes_for :articles
end
class Article < ApplicationRecord
belongs_to :user
end
视图:
<%= form_for(user) do |f| %>
...
<div class="field">
<%= f.label :name %>
<%= f.text_field :name %>
</div>
<%= f.fields_for :articles, Article.new do |ff| %>
<div class="field">
<%= ff.label "Article title" %>
<%= ff.text_field :title %>
</div>
<% end %>
...
控制器是脚手架生成的 - 没有必要在这里显示它们。
发生了什么事?有人可以澄清吗? accepted_nested_attributes_for 通常是否可以在没有Thinking Sphinx的情况下工作?
答案 0 :(得分:1)
这实际上是Rails / ActiveRecord 5.0中的行为更改,而Thinking Sphinx中的一个错误使其停止工作:belongs_to
关联默认为已进行验证。
TS中的错误是固定的,尽管新版本尚未通过该修复程序发布。详细信息如下:Thinking-spinx breaks belongs_to built-in validation