SimpleForm:has_many/belongs_to 和 <select> 不预先 select 表单中的当前值

SimpleForm: has_many/belongs_to with <select> does not pre-select the current value in the form

我有以下型号:

class User < ApplicationRecord
  has_many :freelanced_projects, foreign_key: :freelancer_id, class_name: 'Project'

  scope :freelancers, -> { where(role: 'freelancer') }
end

class Project < ApplicationRecord
  belongs_to :freelancer, class_name: 'User', foreign_key: :freelancer_id
end

我使用 SimpleForm 在视图中生成了一个漂亮的表单:

= simple_form_for project do |f|
  = f.input :freelancer, as: :select, collection: User.freelancers, include_blank: true

问题是,在显示的表格中,没有预先选择自由职业者。

如果我将 f.input :freelancer 更改为 f.input :freelancer_id,那么它似乎有效:

但是,正如您在屏幕截图中看到的那样,翻译丢失了,我非常有信心我不应该向翻译文件中的键添加 _id

那么这里有什么问题呢?我该如何解决?

也许这会有所帮助:

= f.input :freelancer, as: :select, collection: User.freelancers.collect { |freelancer| [freelancer.name, freelancer.id] }, include_blank: true

freelancer.name 替换为自由职业者姓名字段的任何名称。

解决方法很简单,用户f.association:

f.association :freelancer, collection: User.freelancers.collect { |user| [user.name, user.id] }, include_blank: true

重要提示:用户 :freelancer,而不是 :freelancer_id! Simple Form 将负责正确命名 <select> 的名称和 ID,同时寻找正确的翻译值。