gpt4 book ai didi

ruby-on-rails - Rails 数据库关系 : Post. category.name = ? (未定义方法 `name')

转载 作者:太空宇宙 更新时间:2023-11-03 17:38:22 25 4
gpt4 key购买 nike

每个帖子只有一个类别,我需要通过类似的方式访问类别的名称

p = Post.new
p.category.name = "tech"
p.save

怎么做?


   class Category < ActiveRecord::Base
has_many :posts, :dependent => :destroy

attr_accessible :name, :image

end

后.rb

class Post < ActiveRecord::Base
belongs_to :category

attr_accessible :category_id, :name, :text, :lang, :image

end

架构.rb

create_table "categories", :force => true do |t|
t.string "name"
t.string "image"
end

最佳答案

你的例子有问题。

p = Post.new
p.category.name = "tech"
p.save

首先,您创建一个新帖子。其次,您想为帖子的类别分配一个名称,但没有分配任何类别。这会导致像 post.nil.name 这样的调用,其中 nil 将是类别对象(如果已分配),但事实并非如此。由于 nil 没有方法 name,您会得到描述的错误 undefined method name for nil class

要解决这个问题,您首先需要分配一个类别进行处理。

p.category = Category.firstp.category_id = 1。之后,p.category 将返回类别对象,因此 p.category.name 是有效的,因为它是在类别对象上调用的,而不是在 nil 上调用的

tl;dr:

p = Post.new
p.category # => nil
p.category.name # throws an error

p.category = Category.first
p.category # => <#Category ...>
p.category.name # => 'actual name of category'
p.category.name = 'foo' # works now

关于ruby-on-rails - Rails 数据库关系 : Post. category.name = ? (未定义方法 `name'),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10558749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com