2014-03-24 46 views
0

我有2种型号:新闻UploadedFile的轨道4,回形针和多态关联

class News < ActiveRecord::Base 
    has_many :uploadedfiles, as: :parent 
    attr_accessible :title, :content, :author 
end 

class Uploadedfile < ActiveRecord::Base 
    belongs_to :parent, polymorphic: true 
    has_attached_file :url 
    attr_accessible :url_file_name, :url_content_type, :url_file_size, :url_updated_at 
end 

与形式:

<%= form_for(@news) do |f| %> 

    <div class="field"> 

     <%= f.fields_for :uploadedfile, f.uploadedfile.new do |uf| %> 
      <%= uf.label :url %><br> 
      <%= uf.file_field :url %> 
     <% end %> 

    </div> 

    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

当我提交表单,我的表uploadedfile没有改变

问题在哪里?谢谢!

回答

4

我想你已经嵌套arribute :uploadedfiles

class News < ActiveRecord::Base 
    has_many :uploadedfiles, as: :parent 
    attr_accessible :title, :content, :author, :uploadedfiles_attributes 
    accept_nested_attributes_for :uploadedfiles 
end 

而在形式: 变化:

<%= f.fields_for :uploadedfile, f.uploadedfile.new do |uf| %> 

到:

<%= f.fields_for :uploadedfiles, Uploadedfile.new do |uf| %> 
+0

谢谢! 我刚刚在news-model中添加:uploadedfiles_attributes到attr_accessible,现在行被添加到sql-table中。但上传的文件字段为空 – Vyacheslav

+0

谢谢!我刚刚将':url'重命名为':file',并将'attr_accessible:file'字符串添加到'uploadedfiles'模型​​。 它的工作原理! – Vyacheslav

0

我不认为你需要这里的多态关联。下面是这样做的更可读的方式:

class News < ActiveRecord::Base 
    has_many :uploadedfiles 
    attr_accessible :title, :content, :author 
    accept_nested_attributes_for :uploadedfiles 
end 

class Uploadedfile < ActiveRecord::Base 
    belongs_to :news 
    has_attached_file :url 
    attr_accessible :url_file_name, :url_content_type, :url_file_size, :url_updated_at 
end 

*请注意,我已经添加accept_nested_attributes_for

而且形式:

<%= form_for(@news) do |f| %> 

    <div class="field"> 

     <%= f.fields_for :uploadedfiles do |uf| %> 
      <%= uf.label :url %><br> 
      <%= uf.file_field :url %> 
     <% end %> 

    </div> 

    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 
+0

谢谢!现在ruby在窗体中构建helper,但sql-table'uploadedfile'没有改变:c也许我应该向控制器添加一些代码? – Vyacheslav

+0

由于您使用的是Rails 4,因此您需要允许这些参数。应该有像params.require(:news).permit(:name ....)。您应该添加uploadedfiles字段。像这样: params.require(:news).permit(:name,:whatever,...,:uploadedfiles_attributes => [:url]) – ermenkoff

+0

我已经允许这些参数: params.require(:news) .permit(:title,:content,:author,:uploadedfiles_attributes => [:url]) – Vyacheslav