2013-03-20 55 views
1

我不太瞭解Rails,我繼承了這個項目。在過去的幾天裏,我一直在努力探索,'link_to'和'routes.rb'。這些東西讓我很生氣 - 我花了整整一天的時間看着它,將代碼粘貼到裸露的項目中,在那裏工作..但我不明白我在這裏得到的錯誤,或者如何去關於解決它,所以如果你有任何想法....Rails link_to靜態頁面問題

在我的網頁_signed_in_header.html.erb我:

<a href="../staticpages/faq">FAQ</a> 

在我的routes.rb我:

get "staticpages/faq" 

我知道這是設置正確的,因爲當我從頭開始一個示例項目時,它的工作原理。

但我繼承了這個特殊的項目中,我得到的錯誤:

NoMethodError in Staticpages#faq 

Showing /home/christophecompaq/Populisto/app/views/layouts/_signed_in_header.html.erb where line #48 raised: 

undefined method `model_name' for NilClass:Class 
Extracted source (around line #48): 

45: 
46:  <div class='search-box'> 
47:  <%= simple_form_for @review, :url => search_index_path, :method => :post, :html => { :class => 'form-horizontal'} do |f| %> 
48: 
49:   <%= f.input :search_ids, :collection => @data, :as => :grouped_chosen, 
50:      :group_method => :last, :prompt => false, 
51:      :input_html => { :class => 'span5', :multiple => true }, 
Trace of template inclusion: app/views/layouts/_header.html.erb,  app/views/layouts/application.html.erb 

Rails.root: /home/christophecompaq/Populisto 

Application Trace | Framework Trace | Full Trace 
app/views/layouts/_signed_in_header.html.erb:48:in `_app_views_layouts__signed_in_header_html_erb___586079249_69970641688720' 
app/views/layouts/_header.html.erb:1:in `_app_views_layouts__header_html_erb__1905506502_69970640142220' 
app/views/layouts/application.html.erb:21:in `_app_views_layouts_application_html_erb___1868096314_69970642536740' 

編輯:有人問我,以顯示我的檢討控制器代碼,所以這裏有雲:

class ReviewsController < FrontEndController 
respond_to :html, :json 

before_filter :with_google_maps_api 

def index 
@review = Review.new 
end 

def create 
@review = Review.create((params[:review] || {}).merge(:user_id => current_user.id)) 
if @review.save 
    redirect_to landing_page, :notice => I18n.t('write_review.review_successfully_created') 
else 
    render :action => :index 
end 
end 

def show 
@review = Review.find(params[:id]) 
end 

def edit 
@review = Review.find(params[:id]) 
end 

def update 
@review = Review.find(params[:id]) 
if @review.update_attributes(params[:review]) 

else 
    render :edit 
end 
end 

def destroy 
@review = Review.find(params[:id]) 
@review.destroy 
end 

def repost 
@review = Review.find(params[:id]) 
@review.repost(current_user) 
end 

def reject 
@review = Review.find(params[:id]) 
current_user.reject @review 
end 

end 

不管怎麼說,如果你有什麼想法可能是錯誤的,我會很高興知道....謝謝。

Christophe。

在你的路由文件
+0

很可能,模板試圖訪問尚未分配的變量(可能是實例變量)。根據所包含的來源,我可能會猜測「@ review」是有問題的變量。 – 2013-03-20 22:53:50

回答

4

,使用此代碼

get "staticpages/faq", :as => 'faq_page' 

的「作爲」將產生2個的輔助功能:faq_page_urlfaq_page_path,你可以在你的代碼

+0

嗨,謝謝,但剛剛嘗試過,並得到相同的錯誤。 – CHarris 2013-03-20 22:46:15

+0

對不起,我是否應該更改其他地方的代碼以及routes.rb文件? – CHarris 2013-03-20 22:48:02

+2

未定義的方法'model_name'爲NilClass:Class - >這表示您的@review爲空。閱讀錯誤描述,轉到提到的這一行,在這一行中查看你的代碼,不要猶豫,使用puts來回應你的變量在你的服務器控制檯中,如果你需要使用調試器,並且找到@review爲什麼是空的你錯了嗎?) – Benj 2013-03-20 22:48:45

1

渲染過程中的錯誤是發生使用佈局模板,而不是控制器視圖。

如果您正在測試常見問題解答頁面,您將會碰到StaticpagesController,而不是您粘貼的ReviewController?據推測,StaticpagesController不會設置@review ...因此你的例外。

因此可嘗試在有條件的包裝一樣的搜索框代碼:

<% if @review %> 
    ... put your review search form here ... 
<% end %> 

如果搜索是應該出現在所有的頁面,確保它填充的所有網頁上。也許在你的控制器基類的東西添加before_filter

類ApplicationController的< ....

before filter :ensure_review_set 

private 

def ensure_review_set 
    @review ||= Review.new 
end 

搜索表單也如果search_ids領域引用@data。這也將需要由使用此佈局的任何控制器初始化。更一般地說,如果你的rails版本支持它,我會非常強烈地推薦better_errors gem來快速調試這樣的錯誤。

+0

乾杯jbw,我會在今天晚些時候詳細看看你的建議,然後回覆你。謝謝您的幫助! – CHarris 2013-03-21 09:30:13

+0

這是否解決了您的問題? – jbw 2013-03-26 01:44:08

+0

對不起,剛纔看到你的問題,突然每週的電子郵件堆棧交換髮送給我。不記得你是否解決了我的問題 - 我會檢查 - 但努力+1! – CHarris 2013-08-08 21:23:29

2

我希望這會幫助,我想我們有相同的問題,但我已經設法解決這個問題使用這樣的:在我的routes.rb

match 'pages/:action', :controller => "pages" 

在我看來

= link_to "About", {:controller => 'pages', :action => 'about'}