控制器变量在视图中为零

时间:2013-02-14 02:25:01

标签: ruby-on-rails ruby-on-rails-3 model-view-controller

我对铁轨上的红宝石很新,但简单的操作让我发疯了

我将变量从Controller传递给View

但是我认为所有与我相似的问题都是零,但没有一个是解决方案

我有一个名为news_read

的方法
def news_read
    @name = "Come On "
end

正确关联视图(news_read.html.erb)中,我尝试了这个

<%= @name.inspect %>

但是浏览器上的值是

nil

3小时前我遇到了麻烦,而且根本没有工作

任何帮助将不胜感激

修改

我尝试记录某些东西,但它没有被调用,所以我的路线看起来像这样

get "main/news_read"
  get "main/index"
  root :to => 'main#index', :as => 'main'

  resources :categories
  resources :testimonials
  resources :news
  resources :products
  resources :teams
  resources :abouts
  resources :main
  resources :header_titles

3 个答案:

答案 0 :(得分:1)

我不能评论你的答案(不够SO点),所以我在这里添加。

您似乎覆盖了内部ActionView::TemplateRenderer#resolve_layoutdocs),我认为这不是您想要达到的目标,可能会给您带来问题。

我建议你在你的控制器中将该方法重命名为其他方法,但保持它是受保护的或私有的,这样如果你有自由路由,它将不会被视为一个动作方法。

答案 1 :(得分:0)

使用:

<%= debug @name %>

据我所知.inspect将hash / array作为字符串返回。

还要考虑添加到您的Gemfile:

group :development do
  gem 'better_errors'
end

然后运行bundle install

修改

在你的路线中试试这个

match 'main/news' => 'main#news_read'

然后您的API是 localhost / main / news

答案 2 :(得分:0)

我修复了我试图根据操作名称指定另一个布局,并且该方法是私有的我不知道为什么它会阻止它但是删除它修复了问题

就像这样

    layout :resolve_layout


  private 
  def resolve_layout
    case action_name
    when "news_read"
      "news"
    else
      "application"
    end
  end

解决方案是

    layout :resolve_layout

  def resolve_layout
    case action_name
    when "news_read"
      "news"
    else
      "application"
    end
  end