Rails - 通过给定用户的rails种子更新值

时间:2017-03-28 20:53:20

标签: ruby-on-rails ruby ruby-on-rails-5

对于这个问题道歉,我还在学习铁路。尝试通过下拉菜单更新特定用户的家乡城市。我按照此问题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")

2 个答案:

答案 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