find_or_initialize_by和嵌套属性

问题描述:

所以只是一个简单的描述。在'Users/Show'中,我有一个Clubs的表格,它接受CurrentClubs的嵌套属性。我有一个俱乐部名称的文本字段。如果输入已存在的名称,CurrentClubs的嵌套属性将使用已创建的分会的ID创建记录。如果俱乐部不存在,则创建俱乐部,然后将新俱乐部ID添加到CurrentClub嵌套属性中的:club_id字段。find_or_initialize_by和嵌套属性

问题并非试图从新创建的俱乐部获得id,它做得很好。问题是试图从已经存在的俱乐部获得id并将其放入嵌套属性中。出于某种原因,它没有被输入到参数中。总之,如果我输入一个不存在的新俱乐部,嵌套属性将被完美输入并且俱乐部被创建,如果俱乐部确实存在,它会捕获除:club_id以外的嵌套属性。

服务器不断出现这样的:提前

Processing by ClubsController#create as HTML 
    Parameters: {"club"=>{"name"=>"Pacha", "current_clubs_attributes"=>{"0"=>{"club_id"=>"", "user_id"=>"2"}}, "state"=>"1"}, "commit"=>"+", "authenticity_token"=>"OC4x6CxP3lfaSSneGRjiPDSm6ElxAbj2mGukOVD5VFc=", "utf8"=>"\342\234\223", "locale"=>"en"} 

Clubs#Controller 
    def create 
    @club = Club.find_or_initialize_by_name(params[:club][:name]) 
    @club.attributes = params[:club] unless @club.persisted? 
    respond_to do |format| 
     if @club.save 
     format.html { redirect_to(@club) } 
     else 
     format.html { redirect_to(clubs_url, :notice => 'club could not be created.') } 
     end 
    end 
    end 

Users#Controller 
     def show 
      @club = Club.new 
      1.times { @club.current_clubs.build } 
     end 

Club.rb 
class Club < ActiveRecord::Base 
attr_accessible :state_id, :country_id, :name, :rating, :club_promoters_attributes, :past_clubs_attributes, :current_clubs_attributes 
has_many :current_clubs 
has_many :past_clubs 
has_many :club_promoters 
belongs_to :state 

accepts_nested_attributes_for :club_promoters 
accepts_nested_attributes_for :past_clubs 
accepts_nested_attributes_for :current_clubs 

    scope :by_name, lambda { |s| 
    where("name LIKE ?", "#{s.strip}%") 
    } 


    def full_name 
    "#{name}" 
    end 

    default_scope :order => 'clubs.name ASC' 

end 

Current_clubs#form 
<div> 
<%= form_for(@club) do |f| %> 

    <input id="search_club" type="text" placeholder="Enter Club" /> 

    <%= f.hidden_field :name, :class => 'name' %> 
     <%= f.hidden_field :state, :value => @user.state_id %> 

     <%= f.fields_for :current_clubs do |current_clubs_fields| %> 
     <%= current_clubs_fields.hidden_field :club_id, :value => @club.id %> 

     <%= current_clubs_fields.hidden_field :user_id, :value => @user.id %> 

     <% end %> 




    <%= f.submit "+" %> 
<% end %> 

<script> 
    $("#search_club").bind('keyUp blur', function (event) { 
     var stt = $(this).val(); 
     $(this).parent().find(".name").val(stt); 
    }); 

</script> 

</div> 

谢谢,原谅我,如果我没有使用过的事情的正确名称,我不是一个伟大的开发者。使用rails 3.09和红宝石1.87

也许一些UsersController代码丢失,但我看不到UsersController代码所属的操作。您是否尝试将@club设置为任何现有的记录(例如@club = @user.clubs.first || Club.new)? @club = Club.new将始终返回一个空白标识...

+0

对不起,我现在编辑它。它在Show中。 – Dol 2012-02-01 01:42:11

+0

你想要整个UsersController吗? – Dol 2012-02-01 01:42:54

+0

我试过@club = Club.first || Club.new,仅仅是因为用户没有与俱乐部建立关系。这似乎是创造多个CurrentClubs ... – Dol 2012-02-01 01:52:23