2014-05-14 126 views
0
Page.find(permalink: 'home') 
# => Page.find(permalink: 'home')                               
# => ArgumentError: Unknown key: permalink 

Page.where(permalink: 'home') 
# => [#<Page id: 1, permalink: "home", content: "foo", created_at: "2014-05-14 01:54:06", updated_at: "2014-05-14 01:54:06">] 

路線Rails的Model.find鑰匙沒找到,Model.where鑰匙上發現

get ':permalink', to: 'page#show', as: :page 

型號

class Page < ActiveRecord::Base 
    validates_uniqueness_of :permalink 
end 

控制器

class PageController < ApplicationController 
    def show 
    @page = Page.find(permalink: params[:permalink]) 
    end 

    def new 
    @page = Page.new 
    end 

    def create 
    @page = Page.new page_params 

    if @page.valid? 
     redirect_to @page 
    else 
     render :new 
    end 
    end 

    def update 
    @page = page.find(params[:permalink]) 

    if @page.update(page_params) 
     redirect_to @page 
    else 
     render :edit 
    end 
    end 

    def edit 
    @page = page.find params[:permalink] 
    end 

    private 

    def page_params 
    params.require(:page).permit(:permalink, :content) 
    end 
end 

我在做點什麼嗎?

+2

'find'用於通過'id'查詢:'找到(12)','通過使用permalink''find_by_permalink( '固定鏈接')' –

+1

但是,由於導軌4個這樣發現者被棄用查詢,所以最好使用'where(...)。first' –

+0

@SergeyKishenin動態查找器如'find_by_permalink('home')'在4.0中已被棄用,但在Rails 4+中,您將需要使用:Page。 find_by(永久鏈接:'home')'。 'find_by(...)'更快/不會在SQL中執行'order by',並且鍵入的次數更少。 –

回答

2

這不是find方法的工作原理。看看the Rails Guide。你傳遞一個可能或不可能在數據庫中的主鍵,而不是散列。 where方法可以採用散列或字符串。

Page.find(1) 
# => [#<Page id: 1, permalink: "home", content: "foo", created_at: "2014-05-14 01:54:06", updated_at: "2014-05-14 01:54:06">] 

Page.where(permalink: "home", content: "foo") 
# => [#<Page id: 1, permalink: "home", content: "foo", created_at: "2014-05-14 01:54:06", updated_at: "2014-05-14 01:54:06">] 
+0

*嘆* derp。總是小事。 – baweaver

+0

@Lemur沒問題!它發生在我們所有人身上! – MrDanA

+0

不要忘了,在Rails 4+中,你也可以使用'find_by(permalink:「home」)',它比'where(permalink:「home」)first''更快找到一條記錄。 (在此之前,有像find_by_permalink('home')這樣的動態查找方法,但這些方法在ActiveRecord 4.0中已棄用。) –