2017-04-21 72 views
0

我想使它在表單中選擇字段中顯示的默認值是一個用戶參數,但問題是參數是一個嵌套的屬性。我不確定如何去做,到目前爲止我還沒有通過谷歌找到任何東西。如何在select標籤中設置默認的「selected」選項嵌套屬性的參數?

以下是我有:

<%= f.select :gender, options_for_select(['Male', 'Female']), { prompt: '--select gender--', selected: params[profile: [:gender]] }, { class: 'form-control' } %> 

爲了澄清,ProfileUser嵌套屬性。他們有一對一的關聯(Profile屬於User)。

我也試過只是把selected: params[:gender],但似乎也沒有工作。

下面是user_params(在用戶控制器):

def user_params 
     params.require(:user).permit(
     :email, :password, :password_confirmation, 
     profile_attributes: [ 
      :user_id, :first_name, :last_name, :gender, :date_of_birth, 
      :occupation, :education, :city, :post_code, :country 
     ] 
    ) 
end 

並在編輯和更新的方法(還包括用戶控制器):

# Edit profile page 
    def edit 
    @user = User.find(params[:id]) 
    end 

    # Patch method for updating profile 
    def update 
    @user = User.find(params[:id]) 
    if @user.update_attributes(user_params) 
     flash[:success] = "Profile updated" 
     redirect_to @user 
    else 
     render 'edit' 
    end 
    end 

這裏是形式是在視圖中,用戶/edit.html.erb

<% provide(:title, 'Edit profile') %> 
<section> 
    <h3 class="pink-text"><i class="fa fa-pencil"></i> EDIT PROFILE</h3> 
    <%= render 'form' %> 
</section> 

用戶/ _form.html.erb:

<%= form_for(@user) do |f| %> 
    <%= render 'shared/error_messages' %> 
    <div class="form-group"> 
     <h4>Account information</h4> 
     <%= f.label :email, class: 'col-sm-2 control-label' %> 
     <div class="col-sm-10"> 
     <%= f.email_field :email, class: 'form-control', placeholder: "[email protected]" %> 
     </div> 
     <%= f.label :password, class: 'col-sm-2 control-label' %> 
     <div class="col-sm-10"> 
     <%= f.password_field :password, class: 'form-control', placeholder: "A-Z,a-z,0-9" %> 
     </div> 
     <%= f.label :password_confirmation, "Confirm password", class: 'col-sm-2 control-label' %> 
     <div class="col-sm-10"> 
     <%= f.password_field :password_confirmation, class: 'form-control', placeholder: "Confirm password" %> 
     </div> 
    </div> 

    <!-- Render profile form --> 
    <%= f.fields_for :profile, @user.profile do |profile| %> 
     <% render 'profile_fields', f: profile %> 
    <% end %> 

    <%= f.submit "Submit", class: "btn btn-primary" %> 
<% end %> <!-- form_for @user --> 

而且,用戶/ _profile_fields.html.erb

<div class="form-group"> 
    <%= f.label :first_name, class: 'col-sm-2 control-label' %> 
    <div class="col-sm-10"> 
    <%= f.text_field :first_name, class: 'form-control', placeholder: 'First Name' %> 
    </div> 

    <%= f.label :last_name, class: 'col-sm-2 control-label' %> 
    <div class="col-sm-10"> 
    <%= f.text_field :last_name, class: 'form-control', placeholder: 'Last Name' %> 
    </div> 

    <%= f.label :gender, class: 'col-sm-2 control-label' %> 
    <div class="col-sm-10"> 
    <%= f.select :gender, options_for_select(['Male', 'Female']), { prompt: '--select gender--', selected: @selected }, { class: 'form-control' } %> 
    </div> 

    <%= f.label :date_of_birth, class: 'col-sm-2 control-label' %> 
    <div class="col-sm-10"> 
    <%= f.date_field :date_of_birth, class: 'form-control' %> 
    </div> 

    <%= f.label :occupation, class: 'col-sm-2 control-label' %> 
    <div class="col-sm-10"> 
    <%= f.text_field :occupation, class: 'form-control', placeholder: "Occupation" %> 
    </div> 

    <%= f.label :city, class: 'col-sm-2 control-label' %> 
    <div class="col-sm-10"> 
    <%= f.text_field :city, class: 'form-control', placeholder: "City" %> 
    </div> 

    <%= f.label :post_code, class: 'col-sm-2 control-label' %> 
    <div class="col-sm-10"> 
    <%= f.text_field :post_code, class: 'form-control', placeholder: "Post code" %> 
    </div> 

    <%= f.label :country, class: 'col-sm-2 control-label' %> 
    <div class="col-sm-10"> 
     <%= f.country_select :country, { priority_countries: ["AU", "US", "GB", "CA", "NZ"], include_blank: true }, { class: 'form-control' } %> 
    </div> 
</div> 
+0

你能顯示,你必須'視圖控制器動作<%= f.select:性別,options_for_select([ '男', '女']),{提示:'--select gender--',選中:params [profile:[:gender]]},{class:'form-control'}%>'? – Gerry

+0

好的,添加它。 – xeno7

回答

0

不要從您的視圖參數,可以先設定要在控制器顯示該值(用類實例變量)然後在您的視圖中使用它。

在控制器:

def edit 
    @user = User.find(params[:id]) 
    @selected = user_params[:profile][:gender] 
end 

def user_params 
    params.require(:user).permit(
    :email, :password, :password_confirmation, 
    profile: [ 
     :user_id, :first_name, :last_name, :gender, :date_of_birth, 
     :occupation, :education, :city, :post_code, :country 
    ]) 
end 

注意user_params也更新(改變profile_attributesprofile)。

鑑於:

<%= f.select :gender, options_for_select(['Male', 'Female']), { prompt: '--select gender--', selected: @selected }, { class: 'form-control' } %> 
+0

我從這裏得到一個錯誤:「ActionController :: ParameterMissing在UsersController#編輯」 – xeno7

+0

我更新了答案(我錯過了'user_params'中的數組)。你還可以分享你的'index.html.erb'(或者你在哪裏調用'edit'方法)? – Gerry

+0

我仍然收到同樣的錯誤。 :/我添加了上面的視圖。 – xeno7