undefined方法`order'for“1”:String

时间:2015-01-28 04:48:58

标签: ruby-on-rails ruby

在我的landing_pages"显示"页面,我试图显示通过该页面传入的潜在客户,并通过他们的"得分"对其进行排序。

我的landing_page模型有:

has_many :page_leads

我的page_lead模型有:

belongs_to :landing_page

在我的page_leads控制器中的索引方法中,我有这个,它有效:

def index
    @page_leads = PageLead.order(score: :desc)
end

我尝试在show_pages控制器中为show方法复制它。这就是我所拥有的:

def show
    @landingpage = LandingPage.find(params[:id]).order(score: :desc)
end

当我尝试去" Show"页面,我收到一个错误"未定义的方法`order' for" 1":String"。我怎样才能让它发挥作用?

我的展示页面包含以下代码:

<tbody>
    <% @landingpage.page_leads.each do |page_lead| %>
      <tr>
        <td><%= page_lead.fname %></td>
        <td><%= page_lead.lname %></td>
        <td><%= page_lead.score %></td>
      </tr>
    <% end %>
  </tbody>

3 个答案:

答案 0 :(得分:0)

只是:

def show
  @landingpage = LandingPage.find(params[:id])
end

原因find返回带有id == params[:id]的LandingPage。无需对单个项目进行排序。

答案 1 :(得分:0)

如果params [:id]是一个数组,则返回一个数组或记录。该顺序不能应用于数组,因为顺序不是数组类的一部分。

如果params [:id]是单个元素,则find返回记录。再次订单不适用,因为它只是一个记录而不是记录的容器..

如果您想要排序列表,请使用    LandingPage.where(id:params [:id])。order

但是因为这是在节目中我怀疑你想要单品......正如spickermann说的那样放弃订单

 LandingPage.find(params[:id])   

答案 2 :(得分:0)

如果您想对Page Leads进行排序,您可以执行类似

的操作
def show
    @landingpage = LandingPage.find(params[:id])
    @page_leads = @landingpage.page_leads.order(score: :desc)
end

正如@spickermann所提到的,.find()只返回一个模型实例。您无法使用ActiveRecord查询方法对此进行排序。

如果您想订购页面潜在客户,则必须在属于目标网页的page_leads集合上致电.order