2012-06-22 48 views
0

我是RoR開發的相對業餘愛好者(大約一個月的經驗),並且我一直在引用來自不同控制器的變量,直到此時沒有問題。我正在爲博客開發CMS,並且無法讓博客作者的用戶名出現在索引或顯示頁面上。我收到一個「未定義的方法」用戶名爲「nil:NilClass」錯誤。但是,我可以獲得ID。任何人都可以幫助指出我的代碼中的錯誤?我將不勝感激。基本的Ruby on Rails未定義的方法問題

這是博客模式:

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 
+0

你的'has_one:users'不應該是單數嗎?換句話說,班博客應該有'has_one:user'。 – Zajn

回答

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

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

end 

還要檢查,可能是user_id是指向不存在的用戶記錄..

0

請檢查您的博客表,並查看每個創建的博客中是否存在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 

請問您的用戶表有username列?

相關問題