我有城市表和个人资料表。以下是两者的模型:
class City < ActiveRecord::Base
belongs_to :profile
end
class Profile < ActiveRecord::Base
belongs_to :user
has_one :city
end
我正在尝试在个人资料视图页面中为城市创建下拉列表。
<%= form_for @profile, url: user_profile_path, :html => { :multipart => true} do |f| %>
<div class="field">
<%= f.label :country %>
<%= f.text_field :country %>
</div>
<div class="field">
<%= f.label :city_id %>
<%= f.select :city_id, options_for_select(@city.collect{ |u| [u.name, u.id] }) %>
</div>
<div class="actions">
<%= f.submit "Update Profile" %>
</div>
<% end %>
这是ProfilesController:
class ProfilesController < ApplicationController
def new
@user = User.find( params[:user_id] )
@profile = Profile.new
@city = City.all
end
def create
@user = User.find( params[:user_id] )
@profile = @user.build_profile(profile_params)
if @profile.save
flash[:success] = "Profile Updated!"
redirect_to user_path( params[:user_id] )
else
render action: :new
end
end
end
如何在配置文件表中添加city_id列,我无法从上面的ProfilesController中捕获city_id。
我在&#34; ProfilesController&#34;中尝试了@city = City.find( params[:city_id] )
,
&#34; Def create&#34;,我收到了这个错误:
找不到带有&#39; id&#39; =
的城市
请建议。
答案 0 :(得分:0)
尝试将city_id
列入白名单而不是city
private def profile_params
params.require(:profile).permit(:country, :city)
end
改变你的联想 -
class City < ActiveRecord::Base
has_one :profile
end
class Profile < ActiveRecord::Base
belongs_to :user
belongs_to :city
end
city_id
列应位于您使用belongs_to
关联
答案 1 :(得分:0)
也许尝试替换
has_one :city
通过
belongs_to :city
在您的个人资料模型和城市模型中替换
belongs_to :profile
通过
has_many :profiles