1

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

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

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

模型是

类任务 < ActiveRecord::Base
     attr_accessible :user_id, :date, :description, :location_id

     属于_to:用户
     has_one :位置
结尾

类位置 < ActiveRecord::Base
     attr_accessible :address, :city, :state, :zip

     has_many:任务
结尾

然后以我的形式,我有

  <div class="nested-fields">
     <%= link_to_remove_association "删除任务", f %>
      <div class="搜索地址">
         < input type="text" value="这里是我想显示地址的地方" >
     </div>
   <%= f.hidden_​​field :location_id %>
   <%= f.inputs : 日期,描述 %>
</div>

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

form.html.erb
<%= semantic_form_for @user, :html=>{:multipart=true} 做 |form| %>

    <%= form.inputs :username, :photo %>


      <%= form.semantic_fields_for :tasks do |builder | %>

   <%= render 'task_fields', :f => builder %>
  <% 结束 %>
<% 结束 %>

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

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

越来越接近这一点。原来我可以输出

<%= 调试 f.object %>

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

4

2 回答 2

0

你试过 @task.location.address 吗?

于 2011-02-15T17:20:09.093 回答
0

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

# 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>

于 2020-10-07T06:07:18.503 回答