对于这个问题道歉,我还在学习铁路。尝试通过下拉菜单更新特定用户的家乡城市。我按照此问题How to have a drop down <select> field in a rails form?中列出的所有步骤进行操作,并且我没有收到任何错误。但是,当我进入我的rails控制台并执行User.first时 - homecities_id仍然设置为nil。非常感谢你们的帮助。
edit.html.erb
<div class="field">
<%= f.label :homecity %><br>
<%= f.collection_select :homecities_id, Homecity.all, :id, :Hometown %>
</div>
User.rb
class User < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable,
:validatable, :omniauthable, omniauth_providers: [:facebook]
cattr_accessor :current_user
belongs_to :homecity, optional: true
end
Homecity.rb
class Homecity < ApplicationRecord
has_many :users
end
Application_controller.rb
class ApplicationController < ActionController::Base
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:username, :name, :avatar, :homecities])
devise_parameter_sanitizer.permit(:account_update, keys: [:username,:name, :avatar, :homecities])
end
end
迁移
class CreateHomecities < ActiveRecord::Migration[5.0]
def change
create_table :homecities do |t|
t.string :Hometown
t.timestamps
end
end
end
class AddHomecitiesRefToUsers < ActiveRecord::Migration[5.0]
def change
add_reference :users, :homecities, foreign_key: true
end
end
seed.rb
Homecity.destroy_all
bigapple = Homecity.create!(Hometown:"New York City")
techhub = Homecity.create!(Hometown:"San Francisco")
longhorns = Homecity.create!(Hometown:"Austin")
angels = Homecity.create!(Hometown:"Los Angeles")
windycity = Homecity.create!(Hometown:"Chicago")
hcards = Homecity.create!(Hometown:"Washington DC")
amazon = Homecity.create!(Hometown:"Seattle")
答案 0 :(得分:2)
add_reference :users, :homecity, foreign_key: true
在迁移中,只有第一个参数应该是复数。看看here.
这就是为什么你的数据库中有homecitied_id
而不是homecity_id
,这是不正确的。
同样在视图中,您需要更改为homecity_id
。
<%= f.collection_select :homecity_id, Homecity.all, :id, :Hometown %>
答案 1 :(得分:2)
因为它是belongs_to
只有一个homecity
而且它实际上是你试图传递给设计的homecity_id。
所以不是......
class ApplicationController < ActionController::Base
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:username, :name, :avatar, :homecities])
devise_parameter_sanitizer.permit(:account_update, keys: [:username,:name, :avatar, :homecities])
end
end
你应该......
class ApplicationController < ActionController::Base
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:username, :name, :avatar, :homecity_id])
devise_parameter_sanitizer.permit(:account_update, keys: [:username,:name, :avatar, :homecity_id])
end
end
您需要将编辑视图修改为单数...
<%= f.collection_select :homecity_id, Homecity.all, :id, :Hometown %>
最后,在迁移中执行rake db:rollback
并将homecities
更改为homecity
,然后再次rake db:migrate
。