연결은 내 레일 아킬레스 건입니다.콘솔에서 연결을 표시하는 방법 콘솔
나는 3 가지 모델과 컨트롤러가 있습니다 : User
, List
, Item
.
사용자가 username
과 password
을 만들 수 있습니다. 목록을 만들 수 있습니다 name
, 항목을 만들 수 있습니다. item_name
이상적인 목록은 사용자에게 속합니다. 항목이 목록에 속합니다. 목록에 많은 항목이 있습니다. 사용자는 많은 목록을 가지고 있습니다.
2.2.1 :005 > List.column_names
=> ["id", "name", "user_id", "created_at", "updated_at"]
2.2.1 :006 > Item.column_names
=> ["id", "item_name", "list_id", "created_at", "updated_at"]
2.2.1 :007 > User.column_names
=> ["id", "username", "password", "created_at", "updated_at"]
그래서 내가 새로운 사용자, 항목을 만들 가서 목록 :
class Item < ActiveRecord::Base
belongs_to :list
delegate :user, to: :list
end
class List < ActiveRecord::Base
belongs_to :user
has_many :items
end
class User < ActiveRecord::Base
has_many :lists
has_many :items, through: :lists
end
레일 콘솔에서 바로 확인하고, 나는 열을 확인 : 그래서 함께했다
User.create(username: "iggy2", password: "helloworld")
#let's say iggy2 has user_id 2.
iggy2에 "중요한 것들"이라는 이름의 목록이 있고 "설거지"항목이 있어야합니다.
List.create(name: "Important", user_id: 2) #let's say this has id of 1
Item.create(item_name: "Wash dishes", list_id: 1)
항목이 목록에 연결되어 있고 목록이 사용자에 연결되어 있다고 가정했습니다. 그러나 User.last.name을 입력하면 "중요"대신 "NoMethodError: undefined method 'name'
"이 표시됩니다. 나는 또한이 내 코드에없는 무엇 내 스키마가
create_table "items", force: :cascade do |t|
t.text "item_name"
t.integer "list_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "lists", force: :cascade do |t|
t.string "name"
t.integer "user_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "users", force: :cascade do |t|
t.string "username"
t.string "password"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
모습입니다 List.last.item_name
에 유사한 오류가? 내 가정이 틀렸어? 마지막 사용자의 항목 이름 또는 목록 이름을 표시하려면 User.last.name
또는 User.last.item_name
을 어떻게 얻을 수 있습니까?
그것은했다. 고맙습니다! 나는 단지 후속 질문을 생각했다. 나는 여전히 다형성을 배우고 있기 때문에 가능한지 확실하지 않지만 User.last.item_name 또는 User.last.name (name = list name) 명령을 사용하여 값을 반환 할 수 있습니까? (즉, 사용자에서 다른 관련 항목의 속성으로 직접 이동할 수 있습니까?) 또는 위 응답에서 언급 한 프로세스를 따라야합니까? 정말 고맙습니다! – Iggy
확실하게 다형성 연관을 적용 할 수 있습니다. 즉,'Item'은'User'와'List' 둘 다에 속할 수 있습니다. http://guides.rubyonrails.org/association_basics.html#polymorphic-associations는 좋은 예를 제시해야합니다. – kasperite