2012-02-21 12 views
0

メンバーシップを通じて複数のグループを持つことができるユーザーモデルがあります。ユーザーがグループのメンバーであり、変更なしでフォームを送信すると、メンバーシップテーブルを更新し、group_idを以下のように0に設定しようとします。フォーム必須ではない場合、ネストされた属性を更新します。

<%= form_for([:admin,@user]) do |f| %> 
--- 
    <div class="field"> 
    <%= f.label :email %><br /> 
    <%= f.text_field :email %> 
    </div> 
    <div class="field"> 
    <%= f.label :password %><br /> 
    <%= f.password_field :password %> 
    </div> 
    <div class="field"> 
    <%= f.label :password_confirmation %><br /> 
    <%= f.password_field :password_confirmation %> 
    </div> 
    <%= f.fields_for :memberships do |builder| %> 
    <div class="field"> 
    <% if builder.object.new_record? %> 
     <%= builder.label :group_id %><br /> 
     <%= collection_select(:memberships, :group_id, @groups, 'id', 'name', {:include_blank => true}) %> 
    <% else %> 
     <%= builder.label :group_id %><br /> 
     <%= builder.text_field :group_id, :value => Group.find(Membership.find(builder.object).group_id).name, :readonly => true %> <%= link_to 'Remove', [:admin,@user,Membership.find(builder.object)], :confirm => 'Are you sure?', :method => :delete %> 
    <% end %> 
    </div> 
    <% end %> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

は、フォームがデータを提出している私のユーザーフォームで
def edit 
     @user = User.find(params[:id]) 
     @groups = Group.current 
     @membership = @user.memberships.build 
    end 

    def update 
     @user = User.find(params[:id]) 
     @groups = Group.current 

     if params[:memberships][:group_id] != "" 
     @membership = @user.memberships.build(:group_id => params[:memberships][:group_id]) 
     end 

     respond_to do |format| 
     if @user.update_attributes(params[:user]) 
      format.html { redirect_to admin_users_url, notice: 'User was successfully updated.' } 
      format.json { head :no_content } 
     else 
      #if params[:memberships][:group_id] == "" 
      # @membership = @user.memberships.build 
      #end 
      format.html { render action: "edit" } 
      format.json { render json: @user.errors, status: :unprocessable_entity } 
     end 
     end 
    end 

...会員accepts_nested_attributes_forユーザーのための私のモデルの私のユーザコントローラで

...

Parameters: {"utf8"=>"✓", 
"authenticity_token"=>"6Vp9sgMySzRm2CU9Dko+Jpf6yaBkXjKkt10UDbb8dcw=", 
"user"=>{"email"=>"[email protected]", 
"password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", 
"memberships_attributes"=>{"0"=>{"group_id"=>"Cricket Maidstone June 2012", 
"id"=>"18"}}}, 
"memberships"=>{"group_id"=>""}, 
"commit"=>"Update User", "id"=>"25"} 

私がしたいのは、フォームをチェックし、collection_selectフィールドにメンバーシップテーブルを更新しないようにしても、電子メール/パスワードの変更を更新するものがないかどうかです。誰もこれを行う方法を見ることができますか?お使いのモデルで

答えて

0

、attr_accessorと並行フィールドを宣言:

attr_accessor :memberships_attributes_input 

def memberships_attributes_input 
    memberships 
end 

def memberships_attributes_input=value 
    # Update memeberships if required evaluating 'value'. 
end 

ではなく、「メンバーシップ」フォームで、この新しいフィールドを使用します。

+0

これを調べてみると、これはうまくいくようですが、私が間違っていたのは、フォームに既存のメンバーが含まれていたため、選択ボックスを空白のままにしておくと、フォーム内のフィールド。とにかくあなたの返事に感謝します。<%= builder.label:group_id%>
<%= builder.text_field:group_id、... – Norto23

+0

歓迎です、あなたがそれを修正してうれしいです – fjyaniez

関連する問題