Rails fields_for没有显示



我卡住了。我有以下模型:profile, user, job。

user有一个profile, profile有多个job。

class Profile < ActiveRecord::Base
  belongs_to :user
  has_many :jobs
  attr_accessible :user_id, :first_name, :last_name, :headline,:jobs_attributes
  accepts_nested_attributes_for :jobs, allow_destroy: true
end
class User < ActiveRecord::Base
  has_one :profile
  attr_accessible :username,:email, :password,:profile_attributes
  accepts_nested_attributes_for :profile, allow_destroy: true
end
class Job < ActiveRecord::Base
  belongs_to :profile
  belongs_to :country
  attr_accessible :company, :country_id, :end_date, :job_title, :profile_id, :start_date
end

现在,我希望用户能够编辑他的配置文件并向其配置文件添加作业。为此,我使用了以下代码:

<%= f.fields_for :jobs do |j| %>
          <%= j.label :job_title, "Job Title" %>
          <%= j.text_field :job_title %>
          <%= j.label :company, "Company" %>
          <%= j.text_field :company %>
          ............................
<% end %>

但问题是,这只显示字段,如果用户已经有一个工作到他的个人资料,我能够更新。但在这种情况下,数组是空的,不会有迭代。我可以用什么来代替这个,以确保表单出现,即使用户没有工作?

我试着添加一个"begin - end while",但它不工作。无论是检查:jobs数组是否为空,还是创建一个新的Job对象都不起作用……或者至少是我的尝试。

你有什么想法吗?

谢谢!

控制器中的新方法。

def new
  resource = build_resource({})
  profile = resource.build_profile
  profile.jobs += [profile.jobs.build]  
  respond_with resource  
end`

如果你想为一个全新的Job包含字段,当你在控制器中将其添加到jobs数组:

profile.jobs.build

就像我们经常在new动作中建立一个虚拟记录来传递给form_for一样,我们也要为fields_for建立一个虚拟记录。

尝试更改:
Accepts_nested_attributes_for:profile, allow_destroy: true

accepts_nested_attributes_for:profile,:update_only => true

相关内容

  • 没有找到相关文章

最新更新