0

我对 ruby​​ on rails 很陌生,但简单的操作让我发疯

我将变量从控制器传递到视图

但在我阅读了所有与我类似的问题但没有一个是解决方案的观点中,它是零

我有一个方法叫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
4

3 回答 3

1

我无法评论你的答案(没有足够的 SO 点)所以我在这里添加这个。

似乎您正在覆盖内部ActionView::TemplateRenderer#resolve_layoutdocs),我认为这不是您想要实现的目标,并且可能会给您带来问题。

我建议您将控制器中的该方法重命名为其他名称,但将其保留为受保护或私有,这样如果您有自由路由,它就不会被视为操作方法。

于 2013-02-14T03:57:01.097 回答
0

采用:

<%= debug @name %>

据我所知,.inspect将哈希/数组作为字符串返回。

还可以考虑添加到您的 Gemfile:

group :development do
  gem 'better_errors'
end

然后运行bundle install

编辑

在你的路线中试试这个

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

然后你的 API 是localhost/main/news

于 2013-02-14T02:59:49.627 回答
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
于 2013-02-14T03:11:08.420 回答