7

我有一個Profile模型,即accepts_nested_attributes_for :grades如何處理simple_form中的嵌套關​​聯中的選定值?

Grade模式是這樣的:

# == Schema Information 
# 
# Table name: grades 
# 
# id   :integer   not null, primary key 
# subject :string 
# result  :string 
# grade_type :integer 
# profile_id :integer 
# created_at :datetime   not null 
# updated_at :datetime   not null 

class Grade < ActiveRecord::Base 
    belongs_to :profile 

    enum grade_type: { csec: 0, cape: 1, sat: 2, g7: 3, g8: 4, g9: 5, g10: 6, g11: 7, g12: 8, g13: 9 } 
end 

在我profiles/_form.html.erb,我有以下幾點:

<%= simple_form_for @profile, html: { class: "form-horizontal" } do |f| %> 
    <%= f.simple_fields_for :grades, html: { class: "form-inline" } do |g| %> 
    <%= g.input_field :grade_type, collection: Grade.grade_types.keys, include_blank: false, class: 'col-lg-8 form-control' %> 
    <% end %> 
<% end %> 

所以,這表明我從枚舉值grade_types像我期望的那樣。

但是我想要發生的是,當我編輯一條記錄時,它顯示了等級,它應該有預先選擇的grade_type。

我該怎麼做?

+0

您是否在控制器中將「grade_types」參數列入白名單? 'require(:profile).permit(grades_attributes:[:grade_type])' – max

+0

@max是的。這不是問題。問題在於檢測已選擇的內容並識別它。 – marcamillion

+0

嗯試試'集合:User.statuses.map {| k,v | [k,k]} - SimpleForm將'ActionView :: Helpers :: FormOptionsHelper'委託給它,並且它可能會將'g.object.grade_type'鏈接到這些選項。 – max

回答

0

simple_form有一個漂亮的選項來預先選擇一個值。你既可以使用:selected選項這是這樣的:

<%= f.input_field :grade_type, collection: Grade.grade_types.keys, include_blank: false, class: 'col-lg-8 form-control', selected: @grade[:grade_type] %> 

我真的不知道做了嵌套的屬性相同,雖然的,但肯定看起來像是我很想學習

+0

我知道':selected'。但是我真正掙扎的是嵌套屬性部分,以及所述嵌套屬性的枚舉值。 – marcamillion

0

獲取從年級對象g.object的grade_type,並通過選擇它傳遞給輸入字段:

<%= f.input_field :grade_type, collection: Grade.grade_types.keys, selected: g.object.grade_type, include_blank: false, class: 'col-lg-8 form-control' %>