怎么显示得当?

时间:2012-03-12 13:00:20

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1 rubygems

我必须展示一些属于洞穴和洞穴属于用户的岩石!看起来很公平吗?但为什么岩石显示页面不能识别洞穴?我们走了:

摇滚模特

belongs_to :cave

洞穴模型

has_many :rocks

用户模型

has_one :cave

摇滚控制器

def new 
    @rock = Rock.new
  end

    def show
     @cave = Cave.find(params[:cave_id])
       @rock = @cave.rocks
    end

  def create  
    @rock = current_user.cave.rocks.build(params[:rock]) 
    if @rock.save
      flash.now[:success] = "Ya Man"
      redirect_to :action => :show
    else
      render :new    
  end
end

摇滚秀视图

<h2><%= @rock.cave.name %></h2>

错误

undefined method `cave' for nil:NilClass

2 个答案:

答案 0 :(得分:2)

show操作中,@cave.rocks返回nil,因此您将nil分配给@rock。顺便说一句,我猜它会返回一个集合而你不会有摇滚元素,你可能想要使用@cave.rocks.first

另外,在岩石控制器上进行一个显示动作是非常奇怪的,它可以获取洞穴ID并根据它找到岩石。更标准的方法是获得摇滚乐。

答案 1 :(得分:1)

在show动作中,在您的行中:

@rock = @cave.rocks

您正在为变量@rock分配(可能)ActiveRelation。 cave.rocks将返回属于该洞穴的岩石集合。

你可以拨打@rock = @cave.rocks.first,但视图中的常规练习是显示与洞穴相关的所有岩石,而不仅仅是第一个。