0

我是 RoR 开发的相对业余爱好者(大约一个月的经验),到目前为止,我一直在引用来自不同控制器的变量,没有任何问题。我正在为博客开发 CMS,但我无法让博客作者的用户名出现在索引或显示页面上。我收到“nil:NilClass 的未定义方法‘用户名’”错误。但是,我可以得到身份证。任何人都可以帮助指出我的代码中的错误吗?我将不胜感激。

这是博客模型:

    class Blog < ActiveRecord::Base
    attr_accessible :post, :title

    has_one :users
    belongs_to :user

        end

这是博客控制器的显示和索引部分:

    def index
      @users = User.all
      @blogs = Blog.all


     respond_to do |format|
       format.html # index.html.erb
       format.json { render json: @blogs }
       end
         end

       # GET /blogs/1
       # GET /blogs/1.json
   def show
     @blog = Blog.find(params[:id])
     @users = User.all      

         respond_to do |format|
           format.html # show.html.erb
           format.json { render json: @blog }
         end
      end

这是 index.html.erb 代码:

     <% @blogs.each do |blog| %>
       <tr>
        <td><%= blog.title %></td>
        <td><%= blog.post %></td>
        <td><%= blog.user.username %></td> #blog.user_id works perfectly here.
        <td><%= link_to 'Show', blog %></td>
        <td><%= link_to 'Edit', edit_blog_path(blog) %></td>
        <td><%= link_to 'Destroy', blog, method: :delete, data: { confirm:'sure?'} %></td>
       </tr>
         <% end %>

这是 show.html.erb 文件的代码:

      <p>
      <b>Title:</b>
       <%= @blog.title %>
       </p>

       <p>
       <b>Author:</b>
        <%= @blog.user.username %>
       </p>

       <p>
       <b>Post:</b>
       <%= @blog.post %>
       </p>

这是博客控制器中的创建代码:

      Here is the create code:

    # POST /blogs
    # POST /blogs.json
        def create
         @blog = Blog.new(params[:blog])
         @blog.user_id = current_user

           respond_to do |format|
            if @blog.save
              format.html { redirect_to @blog, notice: 'Blog was successfully created.' }
              format.json { render json: @blog, status: :created, location: @blog }
               else
                format.html { render action: "new" }
                format.json { render json: @blog.errors, status: :unprocessable_entity }
              end
            end
          end
4

2 回答 2

2
class Blog < ActiveRecord::Base
   attr_accessible :post, :title

    #has_one :users // remove this line of code..
    belongs_to :user

end

还要检查,可能是 user_id 指向一个不存在的用户记录。

于 2012-06-22T19:29:20.000 回答
0

请检查您的 blogs 表并查看 user_id 是否存在于每个创建的博客中。

还要检查您的用户模型是否根据您所需的关联进行更改。

如果您使用的是一对一关系,那么您的用户模型应该有

class User < ActiveRecord::Base
  has_one :blog
end

或者如果您使用的是一对多关系,那么用户模型应该有

class User < ActiveRecord::Base
  has_many :blogs
end

通过以下方式更改您的博客模型。

class Blog < ActiveRecord::Base
   attr_accessible :post, :title
   belongs_to :user
end

尝试通过在您的博客控制器中添加以下更改来创建新博客。

def create
 @blog = Blog.new(params[:blog])
 @blog.user_id = current_user.id

 respond_to do |format|
  if @blog.save
   format.html { redirect_to @blog, notice: 'Blog was successfully created.' }
   format.json { render json: @blog, status: :created, location: @blog }
  else
   format.html { render action: "new" }
   format.json { render json: @blog.errors, status: :unprocessable_entity }
  end
 end
end

您的用户表是否有用户名列?

于 2013-09-03T08:37:32.007 回答