【问题标题】:get association values in rails forms获取 Rails 形式的关联值
【发布时间】:2011-06-27 18:29:44
【问题描述】:

我正在构建一个用户有任务并且任务有位置的应用程序。 任务和位置位于使用 formtastic_cocoon 的 nested_form 中,这是带有 jQ​​uery 扩展的 formtastic gem。

location.address 字段是一个自动完成文本字段,用于搜索数据库中已存在的地址。因此,当用户选择地址时,表单中的隐藏 location_id 会被填充。

我想要做的是,当用户去编辑任务时,我希望它显示当前选择的地址,但我看不到任何可以检索该值的地方。我可以获取 location_id,就像在任务模型中一样,但我似乎无法获取关联的 location.address。

模型是

类任务

然后在我的表格中,我有

-----------已编辑以包含所有格式代码---------------

form.html.erb {:multipart=true} 做 |form| %> builder %>

------- 结束编辑 -------------- 我尝试输出不同方式的“f”,但没有看到对关联位置的任何引用,但是如果我在表单之外调试 User.Task[0].Location,我会得到正确的位置详细信息。我如何在表单中获取它??

---------更新------------

在这方面更接近一点。原来我可以输出

我得到了返回的任务对象。不幸的是,它不包括位置对象,只包括 location_id 字段的值。

【问题讨论】:

  • 你在<%= form_for @task do |f| %>,对吧?
  • 类似,我在语义字段中,它更类似于 fields_for 而不是 form_for
  • 是的,使用formtastic_cocoon,它是带有jQuery扩展的formtastic
  • f.object.location 不返回位置吗?

标签: ruby-on-rails forms associations formtastic


【解决方案1】:

您尝试过@task.location.address 吗?

【讨论】:

  • 我试过了,我得到了一个未定义的“位置”方法,用于 nil:Nilclass
  • 那不是说@task 是 nil 吗?
  • @user.tasks 不是零,@user.task 是零。 @user.tasks.location 为零
  • 您能发布您的完整表单代码(formtastic 的)吗? for 是什么对象?
【解决方案2】:

你的方法是对的。但是有一些幻灯片错误概念声明关联。我想改变如下:

# app/models/task.rb

class Task < ActiveRecord::Base
  attr_accessible :user_id, :location_id, :date, :description

  belongs_to :user
  belongs_to :location
end

由于我们将location 外键存储在tasks 表中,因此最好在此处声明belongs_to 关联。

# app/models/location.rb

class Location < ActiveRecord::Base
  attr_accessible :address, :city, :state, :zip

  has_many :tasks

  # this method will return full address of a location
  def full_address
    [address, city, state, zip].reject(&:blank?).join(", ")
  end
end 

然后你需要添加所选位置的full_address

# app/views/users/_task_fields.html.erb

<div class="nested-fields"> 
  <%= link_to_remove_association "remove task", f %>
  
  <div class="searchAddress">
    <input type="text" value="<%= f.object.location&.full_address %>">
  </div>
  
  <%= f.hidden_field :location_id %>
  <%= f.inputs :date, description %>
</div>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    相关资源
    最近更新 更多