Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 Rails简单表单关联不工作_Ruby On Rails 4_Simple Form - Fatal编程技术网

Ruby on rails 4 Rails简单表单关联不工作

Ruby on rails 4 Rails简单表单关联不工作,ruby-on-rails-4,simple-form,Ruby On Rails 4,Simple Form,RoR新手。我正在制作一个简单的博客来发布音乐条目。我有两个模型-曲调和艺术家,其中一个曲调属于艺术家。我正在使用simple_form来渲染我的表单。我遇到的问题是,simple_表单正在提取正确的关联,但当我单击submit时,它没有正确保存关联,验证也没有通过。代码如下: 班级 class Tune < ActiveRecord::Base belongs_to :artist validates :artist, presence: true end class Arti

RoR新手。我正在制作一个简单的博客来发布音乐条目。我有两个模型-曲调和艺术家,其中一个曲调属于艺术家。我正在使用simple_form来渲染我的表单。我遇到的问题是,simple_表单正在提取正确的关联,但当我单击submit时,它没有正确保存关联,验证也没有通过。代码如下:

班级

class Tune < ActiveRecord::Base
  belongs_to :artist
  validates :artist, presence: true
end

class Artist < ActiveRecord::Base
  has_many :tunes
end
我的表格

<%= simple_form_for @tune, :html => { :class => 'form-horizontal' } do |f| %>
  <%= f.input :name %>
  <%= f.input :soundcloud_link %>
  <%= f.input :download_label %>
  <%= f.input :download_link %>
  <%= f.input :mix %>
  <%= f.association :artist%>
  <%= f.button :submit %>
<% end %>
{:class=>'form horizontal'}do | f |%>

将以下内容添加到您的调谐模型中

 accepts_nested_attributes_for :tunes
然后将强参数添加到控制器,例如

params.require(:artist).permit( :id, :name, ... , tune_attributes: [:id, :name, :real_name, ...] )

注意:我假设您使用的rails 4仍然遇到相同的问题。我认为您是对的,它与嵌套属性有关,但在本例中,artist是父类,tune是子类(具有列artist_id)。当我阅读文档时,accepts_nested_attributes_通常分配给父类,而不是子类。执行此操作的原因验证:Artister,presence:true?。艺术家应在艺术家模型中进行验证。删除它并尝试。您是否可以跳过控制台输出以查找错误?
params.require(:artist).permit( :id, :name, ... , tune_attributes: [:id, :name, :real_name, ...] )