我无法将模型实例分配给另一个模型的引用属性。相关代码如下:
module Blog::Models
class Post < Base; belongs_to :user, dependent: :destroy end
class User < Base; has_many :posts end
...
class BasicFields < V 1.0
def self.up
create_table User.table_name do |t|
...
end
create_table Post.table_name do |t|
...
t.references :user
end
end
...
end
end
module Blog::Controllers
...
class PostEditN
...
def post(post_num)
@post = Post.find(post_num)
@user = User.find(@input.user)
...
@post.user = @user # Error thrown: NameError at /post/edit/1 uninitialized constant User
# @post.user_id = @user.id << This is my currently working solution
@post.save
redirect PostN, post_num
end
end
...
end
...
当我在控制台模式下使用Camping为@post.user
分配内容时,它是成功的,但我似乎无法在控制器中完成相同的行为。我只需将@user.id
分配给user_id
实例的Post
属性即可。但是,我想弄清楚为什么替代方法在Camping控制台中工作,而不是在我只是运行网络服务器时。
答案 0 :(得分:0)
我最好的猜测是这是命名空间的问题。在您显示的代码中User
实际上是Blog::Models::User
。在您的控制器中,上下文为Blog::Controllers
。您是否尝试将控制器中的代码更改为?
@post = Blog::Models::Post.find(post_num)
@user = Blog::Models::User.find(@input.user)
...
答案 1 :(得分:0)
我能够解决我的问题。似乎我在创建新的Post
记录时,我没有初始化User
。因此,在分配@post.user
时,它会抱怨user
属性未初始化。我看到的唯一问题是尝试在oprhan Post
记录上进行操作,根据与User
的关系,该记录是无效数据。