actions_as_taggable неопределенный метод Ошибка «каждый» - PullRequest
2 голосов
/ 21 июля 2010

Я пытаюсь использовать плагин act_as_taggable, чтобы включить функциональность тегов в мое приложение ruby ​​on rails. Я приложил код. Я установил плагин и также запустил миграцию. Я получаю следующую ошибку.

undefined method `each' for "value of the parameter":String

Код

location.rb - таблица местоположений имеет имя, теги (это дополнительное поле в таблице, я добавил его, прежде чем узнавать о плагине :), поля города

class Location < ActiveRecord::Base
  belongs_to :profile
  acts_as_taggable
end

profile.rb

class Profile < ActiveRecord::Base
  has_many :locations
  acts_as_tagger
end

location_controller.rb

def create
  @location = Location.new(params[:location])
  @location.tag_list = ["tags1","tags2"]
  if @location.save
     redirect_to(@location)
  else
     redirect_to(@profile)
  end 
end

Трассировка приложения

/usr/local/lib/ruby/gems/1.9.1/gems/activerecord-2.3.8/lib/active_record/associations/association_collection.rb:320:in `replace'
/usr/local/lib/ruby/gems/1.9.1/gems/activerecord-2.3.8/lib/active_record/associations.rb:1331:in `block in collection_accessor_methods'
/usr/local/lib/ruby/gems/1.9.1/gems/activerecord-2.3.8/lib/active_record/base.rb:2906:in `block in assign_attributes'
/usr/local/lib/ruby/gems/1.9.1/gems/activerecord-2.3.8/lib/active_record/base.rb:2902:in `each'
/usr/local/lib/ruby/gems/1.9.1/gems/activerecord-2.3.8/lib/active_record/base.rb:2902:in `assign_attributes'
/usr/local/lib/ruby/gems/1.9.1/gems/activerecord-2.3.8/lib/active_record/base.rb:2775:in `attributes='
/usr/local/lib/ruby/gems/1.9.1/gems/activerecord-2.3.8/lib/active_record/base.rb:2473:in `initialize'
/Users/felix/rails_projects/sample_app/app/controllers/locations_controller.rb:92:in `new'
/Users/felix/rails_projects/sample_app/app/controllers/locations_controller.rb:92:in `create'

Спасибо

Ответы [ 4 ]

3 голосов
/ 21 июля 2010

Вы используете Ruby 1.9 случайно?Остальная часть этого ответа предваряется да.Если это так, читайте дальше.

Возможно, вы наткнулись на изменение поведения 1.9.Строки в 1.9 больше не поддерживают each (то есть они не Enumerable, как Ruby 1.8).Но вы можете использовать each_char, что, вероятно, и было задумано.

Если это не ваш код, то вы можете либо:

  • Вернуться к 1.8.x (Очевидно)
  • Взломайте класс String, добавив метод each (Грязный и, возможно, опасный)
  • Исправьте камень или плагин, вызывающий проблему.

Здесь есть отличная статья здесь

0 голосов
/ 17 июля 2015

Попробуйте заменить @location.tag_list = ["tags1","tags2"] на

@location.tag_list = "tags1, tags2"

, также вы можете добавить теги, подобные следующим:

@location.tag_list.add("tag1, tag2", parse: true)

check этот актерский состав для получения дополнительной информации

0 голосов
/ 05 апреля 2012

У меня была похожая проблема с acts_as_taggable, который жаловался на неопределенный каждый метод, и проблема была в том, что у меня неправильное поле в моем виде _form. У меня было:

<%= f.text_field :tags %>

вместо того, что должно быть:

<%= f.text_field :tag_list %>
0 голосов
/ 21 июля 2010

Я предполагаю, так как я не уверен, каковы значения в параметрах (возможно, вы можете вывести params.inspect, чтобы получить их);Я думаю, что значение, которое вы передали в Location.new в params [: location], является строкой, и он ожидал хэш пар ключ-значение.

Возможно, вы имели в виду: Location.new(:location => params[:location])

Или: Location.new(params)

Или, может быть, Location.new(params[:location]) является правильным , но это не хеш, как должно быть (обычно это делается для вас помощниками формы в вашем коде представления).

...