2017-04-21 11 views
0

フォームの選択フィールドに表示されるデフォルト値がユーザーパラメーターであるようにしようとしていますが、パラメーターがネストされた属性であるという問題があります。私はそれについて行く方法がわかりません、そして、これまで私はGoogleを通して何かを見つけていません。ここでselectタグのデフォルトの 'selected'オプションをネストされた属性のパラメータにする方法はありますか?

は私が持っているものである。明確にするために

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

ProfileUserのネストされた属性です。彼らは1対1の関係を持っています(ProfileUserに属します)。

私はまた、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ためのコントローラアクションを表示することができます: ' - :gender--'、selected:params [profile:[:gender]]}、{class: 'form-control'}%> '? – Gerry

+0

さて、それを追加しました。 – xeno7

答えて

0

ビューからのparamsを呼び出さないでください、最初にあなたが(変数クラスのインスタンスで)コントローラに表示する値を設定しますあなたの視点でそれを使用してください。コントローラで

user_paramsも更新されたこと

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 

お知らせ(profileprofile_attributesを変更)。ビューで

:性別、options_for_select([ '男性'、 '女性'])、{プロンプト:

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

私はこのエラーを受け取ります: "ActionController :: ParameterMissing in UsersController#edit" – xeno7

+0

私は答えを更新しました(私は 'user_params'で配列を見逃しました)。 'index.html.erb'(または' edit'メソッドを呼び出すビュー)を共有することはできますか? – Gerry

+0

私はまだ同じエラーが発生しています。 :/上記のビューを追加しました。 – xeno7

関連する問題