Я пытаюсь обновить ActiveRecord, который, кажется, ДОЛЖЕН быть достаточно легким.Методы, которые я пробовал в моем
контроллере (metadata_controller.rb) :
def update_metadata_type
@metadata_type = MetadataType.find(params[:id])
if @metadata_type.update_attributes(params)
render :template => 'metadata/show_metadata_type'
else
# return error template
end
end
def update_metadata_type
if MetadataType.update(1, { :name => params[:name] })
render :template => 'metadata/show_metadata_type'
else
# return error template
end
end
def update_metadata_type
@metadata_type = MetadataType.find(params[:id])
@metadata_type.name = params[:name]
@metadata_type.save
render :template => 'metadata/show_metadata_type'
end
Модель (metadata_type.rb):
class MetadataType < ActiveRecord::Base
has_many :metadata_type_attributes, :dependent => :destroy
has_many :attributes, :through => :metadata_type_attributes, :dependent => :destroy
attr_accessible :name, :attribute_type_id
validates :name, :uniqueness => true
end
Другая модель с той же проблемой (attribute_type.rb):
class AttributeType < ActiveRecord::Base
belongs_to :attributes
attr_accessible :data_type
validates :data_type, :uniqueness => true
end
rout.rb:
match '/metadata_type/:id' => 'metadata#update_metadata_type', :via => [:put], :as => 'update_metadata_type'
Каждый раз, когда я отправляю данные, используя RESTClient , с соответствующими заголовками для отправки json, со следующими данными вКоманда PUT:
{
"name" : "NewName"
}
Я также использовал binding.pry в контроллере, чтобы убедиться, что @metadata_type найден (а не nil) и всегда выглядит правильно:
[1] pry(#<MetadataController>)> @metadata_type = MetadataType.find(params[:id])
=> #<MetadataType id: 1, name: "Category", created_at: "2011-11-15 16:02:53", updated_at: "2011-11-15 16:02:53">
Параметры также выглядят правильно:
[7] pry(#<MetadataController>)> params
=> {"name"=>"NewName",
"controller"=>"metadata",
"action"=>"update_metadata_type",
"id"=>"1",
"metadatum"=>{"name"=>"NewName"}}
Но по какой-то причине, независимо от того, как я пытаюсь сохранить, я получаю ту же ошибку:
NoMethodError (undefined method `keys' for #<ActiveRecord::Relation:0x007fdfb7637fd8>):
app/controllers/metadata_controller.rb:50:in `update_metadata_type'
Есть идеи о том, что это вызывает?Вся помощь приветствуется