поля токенов - слишком большой уровень стека - PullRequest
1 голос
/ 29 марта 2012

Я застрял на некоторое время, пытаясь добавить теги к сообщениям. Я использую http://railscasts.com/episodes/258-token-fields в качестве руководства.

Почтовая форма имеет вложенные изображения и теги. Теги обрабатываются как авторы в эпизоде ​​Райана.

При создании нового поста я получаю, уровень стека слишком глубокий, ошибка.

Есть идеи?

Модель

class Post < ActiveRecord::Base
  attr_accessible :title, :body, :keywords, :description, :post_images_attributes, :tags

  has_and_belongs_to_many :tags
  has_many :post_images, :dependent => :destroy

  validates :title, :presence => true
  validates :body, :presence => true
  validates :keywords, :presence => true
  validates :description, :presence => true

  extend FriendlyId
  friendly_id :title, use: :slugged

  accepts_nested_attributes_for :post_images, :allow_destroy => true #, :reject_if => lambda { |a| a[:image].blank? }
  accepts_nested_attributes_for :tags, :allow_destroy => true

  attr_reader :tags

  def tags=(ids)
    self.tags = ids.split(",")
  end
end

Форма

<%= form_for @post, :html => {:multipart => true} do |f| %>
  <div class="field">
    <%= f.label :title %><br/>
    <%= f.text_field :title %>
  </div>
  <div class="field">
    <%= f.label :body %><br/>
    <%= f.text_area :body %>
  </div>
  <div class="field">
    <%= f.label :keywords %><br/>
    <%= f.text_field :keywords %>
  </div>
  <div class="field">
    <%= f.label :description %><br/>
    <%= f.text_field :description %>
  </div>

  <div class="field">
    <%= f.label :tags %><br/>
    <% if !@post.tags.blank? %>
      <%= f.text_field :tags, "data-pre" => @post.tags.map(&:attributes).to_json %>
    <% else %>
      <%= f.text_field :tags %>
    <% end %>
  </div>

  <%= f.fields_for :post_images do |builder| %>
    <%= render "post_image_fields", :f => builder %>
  <% end %>
  <p><%= link_to_add_fields "Add Image", f, :post_images %></p>

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

Вход

Started POST "/posts" for 127.0.0.1 at 2012-03-29 15:43:57 +0200
  Processing by PostsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"r/oWrpb4AOAwMrp+G6vOUmaQPFh32
NsabUa2h+O5KrY=", "post"=>{"title"=>"Test post", "body"=>"Test body", "keywords"
=>"key, words", "description"=>"description", "tags"=>"1", "post_images_attribut
es"=>{"0"=>{"image"=>#<ActionDispatch::Http::UploadedFile:0x392e410 @original_fi
lename="africa-web-l.jpg", @content_type="image/jpeg", @headers="Content-Disposi
tion: form-data; name=\"post[post_images_attributes][0][image]\"; filename=\"afr
ica-web-l.jpg\"\r\nContent-Type: image/jpeg\r\n", @tempfile=#<File:C:/Users/user
/AppData/Local/Temp/RackMultipart20120329-5772-dl0ix3>>, "is_main"=>"1", "_destr
oy"=>"false"}}}, "commit"=>"Create Post"}
Completed 500 Internal Server Error in 24ms

SystemStackError (stack level too deep):

1 Ответ

3 голосов
/ 29 марта 2012

Слишком высокий уровень стека означает, что вы рекурсивно меняете атрибут.Это происходит здесь:

def tags=(ids)
  self.tags = ids.split(",")
end

Вам нужно использовать другое имя для этого метода.

...