ruby - 为什么ActiveRecord_Relation不能调用实例方法?该怎么实现?
淡淡烟草味
淡淡烟草味 2017-04-24 16:00:44
0
2
811

数据设计大概是这样的:

section belongs_to :page
page has_many :sections

想实现的功能是:

利用public#show来显示相应permalink的Page所包含的所有sections.
get 'show/:permalink', :to => 'public#show'

controller 代码

class PublicController < ApplicationController layout 'public' def index # intro text end def show @page = Page.where(:permalink => params[:permalink], :visible => true) puts "get permalink:", params[:permalink] puts "permalink",@page if @page.nil? redirect_to(action: 'index') else #display the page content using show .html.erb end end end

p4是通过where条件查出来的

`irb(main):048:0> p4 = Page.where(permalink:"page4")
Page Load (0.4ms) SELECTpages.* FROMpagesWHEREpages.permalink= 'page4'
=> #]>`

p5是直接找到了那条数据,我认为p4和p5是一样的,都可以调用Page的实例方法

`irb(main):057:0> p5 = Page.last
Page Load (0.4ms) SELECTpages.* FROMpagesORDER BYpages.idDESC LIMIT 1
=> #`

可结果确不行:

`irb(main):065:0* p4.class
=> Page::ActiveRecord_Relation
irb(main):066:0> p5.class
=> Page(id: integer, subject_id: integer, name: string, permalink: string, position: integer, visible: boolean, created_at: datetime, updated_at: datetime)`

报错如下

`
undefined method `sections' for #
Extracted source (around line #5):

<%= @page.name %>

<% @page.sections.visible.sorted.each do |section| %>

<% case section.content_type %> <% when 'HTML' %>

`

淡淡烟草味
淡淡烟草味

reply all (2)
世界只因有你

This issue has been resolved, thank you everyone!

Add a .first
@page = Page.where(:permalink => params[:permalink], :visible => true).first
    左手右手慢动作

    Can I see your migration code?

      Latest Downloads
      More>
      Web Effects
      Website Source Code
      Website Materials
      Front End Template
      About us Disclaimer Sitemap
      php.cn:Public welfare online PHP training,Help PHP learners grow quickly!