Ruby on rails 错误:未定义的方法'each';至于;“1”节:一串
我正在尝试在我的Ruby on rails 错误:未定义的方法'each';至于;“1”节:一串,ruby-on-rails,ruby,ruby-on-rails-4,methods,associations,Ruby On Rails,Ruby,Ruby On Rails 4,Methods,Associations,我正在尝试在我的things/new表单中将一个模型东西与另一个东西关联起来。通过一个联接表,每个事物都有很多:相关的事物 当我提交表单时,出现以下错误: NoMethodError in ThingsController#create undefined method `each' for "1":String 我的代码哪里出错了 Thingmodel:我在错误消息的那行周围放了星号 class Thing < ActiveRecord::Base has_many :relate
things/new
表单中将一个模型东西
与另一个东西
关联起来。通过一个联接表,每个事物都有很多:相关的事物
当我提交表单时,出现以下错误:
NoMethodError in ThingsController#create
undefined method `each' for "1":String
我的代码哪里出错了
Thing
model:我在错误消息的那行周围放了星号
class Thing < ActiveRecord::Base
has_many :related_things
has_many :things, :through => :related_things
has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "30x30!" }, :default_url => "/images/:style/missing.png"
validates_attachment_content_type :avatar, :content_type => /\Aimage\/.*\Z/
def related_things
related_thing_ids = RelatedThing.
where("thing_a_id = ? OR thing_b_id = ?", self.id, self.id).
map { |r| [r.thing_a_id, r.thing_b_id] }.
flatten - [self.id]
Thing.where(id: related_thing_ids)
end
def related_thing_ids=(ids)
***ids.each do |id|***
record = RelatedThing.where(thing_a_id: self.id, thing_b_id: id).first
record ||= RelatedThing.where(thing_a_id: id, thing_b_id: self.id).first
record ||= RelatedThing.create!(thing_a_id: self.id, thing_b_id: id)
end
end
end
事物
控制器:
class ThingsController < ApplicationController
def show
@thing = Thing.find(params[:id])
@related_thing = RelatedThing.all
@thing.things.build
end
def new
@thing = Thing.new
@things = Thing.all
end
def create
@thing = Thing.new(thing_params)
if @thing.save
redirect_to @thing
else
render 'new'
end
end
private
def thing_params
params.require(:thing).permit(:name, :avatar, :related_thing_ids)
end
end
我正在使用Rails 4.0.10。尝试数组(ids)。each…
,它转换数组中的任何对象并响应:each
~ (main) > Array(nil)
=> []
~ (main) > Array([])
=> []
~ (main) > Array('')
=> [""]
~ (main) > Array(1)
=> [1]
请参见“相关内容”下的?您将如何具体实现这一点?将用**和:
数组(ids)组成的行更改为。这必须修复命名错误。BDW,似乎你在一个模型上有一个多对多的关系:“东西”。请阅读()并查看()relationship.rb和user.rb,这是Rails方式与这种关联的一个很好的示例。之后,再对代码进行一些重构,您根本不需要编写方法related\u thing\u id=
。
<h1>Add Something!</h1>
<p>
<%= form_for @thing, :url => things_path, :html => { :multipart => true } do |f| %>
<%= f.text_field :name, :placeholder => "Name of the thing" %>
<br>
<%= f.label :related_things %>
<%= f.collection_select :related_thing_ids, Thing.all, :id, :name %>
<br>
<%= f.label :display_picture %>
<%= f.file_field :avatar %>
<br>
<%= f.submit "Submit", class: "btn btn-primary" %>
<% end %>
</p>
ActiveRecord::Schema.define(version: 20141016190146) do
create_table "related_things", force: true do |t|
t.integer "thing_a_id"
t.integer "thing_b_id"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "things", force: true do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
t.string "avatar_file_name"
t.string "avatar_content_type"
t.integer "avatar_file_size"
t.datetime "avatar_updated_at"
end
end
~ (main) > Array(nil)
=> []
~ (main) > Array([])
=> []
~ (main) > Array('')
=> [""]
~ (main) > Array(1)
=> [1]