用户如何使用表单更新另一个模型 table 的值?
How can a user update another model's table's values using a form?
我有一个包含他们地址的用户。现在,我有另一个 table,称为搜索地址,其中包含 search_address.
这应该是一对一的关系,一个用户只能在搜索地址上创建一个搜索地址table。
我想要它,以便用户可以提交表单,并在地址搜索 table 中创建一个 search_address。之后,我想回调 search_address 的经纬度(我正在使用地理编码器 gem)。
这是我目前的代码:
架构:
create_table "users", force: :cascade do |t|
t.string "address"
t.float "latitude"
t.float "longitude"
end
create_table "search_addresses", force: :cascade do |t|
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "search_address"
t.float "search_latitude"
t.float "search_longitude"
end
用户模型:
class User < ActiveRecord::Base
geocoded_by :address
after_validation :geocode
end
搜索地址模型:
class SearchAddress < ActiveRecord::Base
belongs_to :user
geocoded_by :search_address, :latitude => :search_latitude, :longitude => :search_longitude
end
我目前的看法(我根据另一个 Stack 答案得出这个答案,但它不起作用):
<%= semantic_form_for @users do |f| %>
<%= fields_for @user.searchaddresses do |g| %>
<div class="field">
<%= g.label :search_address, 'Search Address' %>
<br/>
<%= g.text_field :search_address, :class => "form-control" %>
</div>
<%= f.submit 'Save Search Address' %>
<% end %>
<% end %>
此外,我的预期视图将显示如下内容:
<%= @user.searchaddress.latitude %>
<%= @user.searchaddress.longitude %>
根据这些信息,我应该如何处理表单以便用户可以添加一个搜索地址,然后让另一个视图显示该搜索地址的纬度和经度?
1 => 为用户
使用Nested Attributes
class User < ActiveRecord::Base
has_many : search_addresses, dependent: :destroy
geocoded_by :address
after_validation :geocode
accepts_nested_attributes_for :search_addresses
end
2 => 修正拼写错误
<%= semantic_form_for @user do |f| %>
<%= fields_for @user.search_addresses do |g| %>
<div class="field">
<%= g.label :search_address, 'Search Address' %>
<br/>
<%= g.text_field :search_address, :class => "form-control" %>
</div>
<% end %>
<%= f.submit 'Save Search Address' %>
<% end %>
3 => users_controller.rb
def update
#fetch user to be updated along with search_addresses
@user.update(update_user_params)
#after update
end
private
def update_user_params
params.require(:user).permit(search_addresses_attributes: [:search_address])
end
参考文献:- Ruby on Rails Nested Attributes、
我有一个包含他们地址的用户。现在,我有另一个 table,称为搜索地址,其中包含 search_address.
这应该是一对一的关系,一个用户只能在搜索地址上创建一个搜索地址table。
我想要它,以便用户可以提交表单,并在地址搜索 table 中创建一个 search_address。之后,我想回调 search_address 的经纬度(我正在使用地理编码器 gem)。
这是我目前的代码:
架构:
create_table "users", force: :cascade do |t|
t.string "address"
t.float "latitude"
t.float "longitude"
end
create_table "search_addresses", force: :cascade do |t|
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "search_address"
t.float "search_latitude"
t.float "search_longitude"
end
用户模型:
class User < ActiveRecord::Base
geocoded_by :address
after_validation :geocode
end
搜索地址模型:
class SearchAddress < ActiveRecord::Base
belongs_to :user
geocoded_by :search_address, :latitude => :search_latitude, :longitude => :search_longitude
end
我目前的看法(我根据另一个 Stack 答案得出这个答案,但它不起作用):
<%= semantic_form_for @users do |f| %>
<%= fields_for @user.searchaddresses do |g| %>
<div class="field">
<%= g.label :search_address, 'Search Address' %>
<br/>
<%= g.text_field :search_address, :class => "form-control" %>
</div>
<%= f.submit 'Save Search Address' %>
<% end %>
<% end %>
此外,我的预期视图将显示如下内容:
<%= @user.searchaddress.latitude %>
<%= @user.searchaddress.longitude %>
根据这些信息,我应该如何处理表单以便用户可以添加一个搜索地址,然后让另一个视图显示该搜索地址的纬度和经度?
1 => 为用户
使用Nested Attributes
class User < ActiveRecord::Base
has_many : search_addresses, dependent: :destroy
geocoded_by :address
after_validation :geocode
accepts_nested_attributes_for :search_addresses
end
2 => 修正拼写错误
<%= semantic_form_for @user do |f| %>
<%= fields_for @user.search_addresses do |g| %>
<div class="field">
<%= g.label :search_address, 'Search Address' %>
<br/>
<%= g.text_field :search_address, :class => "form-control" %>
</div>
<% end %>
<%= f.submit 'Save Search Address' %>
<% end %>
3 => users_controller.rb
def update
#fetch user to be updated along with search_addresses
@user.update(update_user_params)
#after update
end
private
def update_user_params
params.require(:user).permit(search_addresses_attributes: [:search_address])
end
参考文献:- Ruby on Rails Nested Attributes、