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,同时寻找正确的翻译值。
我有以下型号:
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,同时寻找正确的翻译值。