我不太了解Rails,我继承了这个项目。在过去的几天里,我一直在努力探索,“link_to”和“routes.rb”。这个东西让我很生气 - 我花了一整天的时间来看待它,把一些代码粘贴到裸露的项目中,它的工作原理......但我只是不明白我到这里的错误,或者怎么去关于解决它,所以如果你有任何想法......
在我的页面_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
无论如何,如果你有什么想法可能会出错,我很高兴知道....谢谢。
克里斯托弗。
答案 0 :(得分:5)
,请使用此代码
get "staticpages/faq", :as => 'faq_page'
'as'将生成2个辅助函数:faq_page_url
和faq_page_path
,您可以在代码中使用
答案 1 :(得分:2)
我希望这会有所帮助,我认为我们遇到了同样的问题,但我已经成功解决了这个问题:
在我的routes.rb
中match 'pages/:action', :controller => "pages"
在我看来:
= link_to "About", {:controller => 'pages', :action => 'about'}
答案 2 :(得分:1)
在渲染布局模板期间发生错误,而不是控制器视图。
如果您正在测试faq页面,那么您将访问StaticpagesController,而不是您粘贴的ReviewController吗?并且大概是StaticpagesController没有设置@review ...因此你的例外。
所以要么尝试将搜索框代码包装在条件中,如:
<% if @review %>
... put your review search form here ...
<% end %>
或者如果搜索应该出现在所有页面上,请确保它填充在所有页面上。也许在基类控制器类上添加一个before_filter
,类似于
class ApplicationController&lt; ....
before filter :ensure_review_set
private
def ensure_review_set
@review ||= Review.new
end
端
如果@data
字段,搜索表单也会引用search_ids
。这也需要由使用此布局的任何控制器初始化。
更一般地说,如果您的rails版本支持它,我非常强烈推荐使用better_errors gem来快速调试此类错误。