0

我无法将模型实例分配给另一个模型的引用属性。相关代码如下:

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.iduser_id属性来做到这一点。Post但是,我想弄清楚为什么替代方法在 Camping 控制台中有效,而不是在我只是运行网络服务器时有效。

4

2 回答 2

0

我能够解决我的问题。似乎当我创建新Post记录时,我没有初始化User. 因此,在分配时@post.user它会抱怨该user属性未初始化。我看到的唯一问题是尝试对 oprhanPost记录进行操作,根据与User.

于 2014-01-06T20:34:05.440 回答
0

我最好的猜测是这是名称空间的问题。在您显示的代码User中实际上是Blog::Models::User. 在您的控制器中,上下文是Blog::Controllers. 您是否尝试将控制器中的代码更改为?

@post = Blog::Models::Post.find(post_num)
@user = Blog::Models::User.find(@input.user)
...
于 2014-01-03T16:09:21.107 回答