未定义的方法`first_name'

时间:2012-05-04 16:48:41

标签: ruby-on-rails ruby

任何人都可以为我阐明这一点吗?

的未定义方法`first_name'

这是show.html

<p id="notice"><%= notice %></p>
<div id="container">
<p>
  <b>First name:</b>
  <%= @artist.firstname %>
</p>

<p>
  <b>Second name:</b>
  <%= @artist.surname %>
</p>

<p>
  <b>About:</b>
  <%= @artist.about %>
</p>
<div id="comments">

  <h2>Comments</h2>

<%= render :partial => "shared/comment", :collection => @artist.comments%>

</div
</div>

<%= render :partial => "image", :collection => @artist.images %>
<%= link_to 'Edit', edit_artist_path(@artist) %> |
<%= link_to 'Back', artists_path %>
<%= link_to 'show', images_path %>

这是部分

 <div class="comment">



     <p>


      <span class="commentator"><%= comment.commentator.display_name %> 

    say's</span>


      <%= comment.comment %>


      </p>



    </div

这是好友视图

class Friends < ActiveRecord::Base
    attr_accessible :firstname, :surname
    has_many :comments, :as => :commentator, :class_name =>"Commentable"
    def display_name
    "#{self.firstname} #{self.surname}"
    end


end

这是朋友控制器

class FriendsController < ApplicationController
  # GET /friends
  # GET /friends.xml
  def index
    @friends = Friend.all

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @friends }
    end
  end

  # GET /friends/1
  # GET /friends/1.xml
  def show
    @friend = Friend.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @friend }
    end
  end

  # GET /friends/new
  # GET /friends/new.xml
  def new
    @friend = Friend.new

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @friend }
    end
  end

  # GET /friends/1/edit
  def edit
    @friend = Friend.find(params[:id])
  end

  # POST /friends
  # POST /friends.xml
  def create
    @friend = Friend.new(params[:friend])

    respond_to do |format|
      if @friend.save
        format.html { redirect_to(@friend, :notice => 'Friend was successfully created.') }
        format.xml  { render :xml => @friend, :status => :created, :location => @friend }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @friend.errors, :status => :unprocessable_entity }
      end
    end
  end

  # PUT /friends/1
  # PUT /friends/1.xml
  def update
    @friend = Friend.find(params[:id])

    respond_to do |format|
      if @friend.update_attributes(params[:friend])
        format.html { redirect_to(@friend, :notice => 'Friend was successfully updated.') }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @friend.errors, :status => :unprocessable_entity }
      end
    end
  end

  # DELETE /friends/1
  # DELETE /friends/1.xml
  def destroy
    @friend = Friend.find(params[:id])
    @friend.destroy

    respond_to do |format|
      format.html { redirect_to(friends_url) }
      format.xml  { head :ok }
    end
  end
end

我正在尝试制作它,所以朋友可以在艺术家页面上留言,但我不断收到上述错误。

我是Ruby的新手,所以如果我遗漏了任何东西,我会道歉。

3 个答案:

答案 0 :(得分:4)

基本上,rails会查看数据库以确定模型上的字段。因此,请确保已运行迁移,并且db表上存在first_name。

另外,朋友是复数。在rails中,你的表是复数(朋友),你的模型是单数(朋友),你的控制器是复数(FriendsController)。最好不要违背这一惯例。尝试重命名模型,看看会发生什么

答案 1 :(得分:0)

您需要将Friend类的第2行设为attr_accessible :firstname, :surname,以便您的视图可以访问这些变量。

答案 2 :(得分:0)

此错误与数据库有关,您的db.Run迁移中不存在first_name。