繁体   English   中英

find_or_initialize_by和嵌套属性

[英]find_or_initialize_by and Nested attributes

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

问题不在于尝试从新创建的俱乐部获取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和ruby 1.87

也许缺少某些UsersController代码,但是我看不到UsersController中的代码所属的动作。 您是否尝试将@club设置为任何地方的任何现有记录(例如@club = @user.clubs.first || Club.new )? @club = Club.new将始终返回空白ID ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM