问题描述
数据设计大概是这样的:section belongs_to :pagepage 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 endendp4是通过where条件查出来的
`irb(main):048:0> p4 = Page.where(permalink:'page4') Page Load (0.4ms) SELECT pages.* FROM pages WHERE pages.permalink = ’page4’=> #<ActiveRecord::Relation [#<Page id: 43, subject_id: 28, name: 'page4', permalink: 'page4', position: 1, visible: true, created_at: '2016-05-27 06:43:27', updated_at: '2016-05-27 06:43:54'>]>`
p5是直接找到了那条数据,我认为p4和p5是一样的,都可以调用Page的实例方法`irb(main):057:0> p5 = Page.last Page Load (0.4ms) SELECT pages.* FROM pages ORDER BY pages.id DESC LIMIT 1=> #<Page id: 43, subject_id: 28, name: 'page4', permalink: 'page4', position: 1, visible: true, created_at: '2016-05-27 06:43:27', updated_at: '2016-05-27 06:43:54'>`
可结果确不行:`irb(main):065:0* p4.class=> Page::ActiveRecord_Relationirb(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 #<Page::ActiveRecord_Relation:0x007facb084bc50>Extracted source (around line #5):
<h2><%= @page.name %></h2>
<% @page.sections.visible.sorted.each do |section| %> <p class='section'>
<% case section.content_type %><% when ’HTML’ %>
`
问题解答
回答1:此问题已解决,谢谢大家!加一个.first@page = Page.where(:permalink => params[:permalink], :visible => true).first回答2:
你 migration 的代码能看下么?