【问题标题】:Model Name Not Showing in Rails View模型名称未显示在 Rails 视图中
【发布时间】:2013-06-06 16:36:14
【问题描述】:

我正在构建一个简单的琐事应用程序,并为我的表单使用引导生成器。在我的模型的新表单和更新表单中,模型名称没有出现在我的视图中。这是app/views/questions/new.html.erb的代码:

<div class="page-header">
  <h1>
    <%=t '.title', :default => [:'helpers.titles.new', 'New %{model}'], :model => @model_name %>
  </h1>
</div>
<%= render :partial => 'form' %>

这是我的questions_controller.rb

class QuestionsController < ApplicationController

  ...

  def new
    @model_name = Question.model_name.human
    @question = Question.new

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @question }
    end
  end

  ...

  private
    def question_params
      params.require(:question).permit(:body)
    end
end

New 这个词出现在视图中,但没有显示模型名称... 有人知道这里发生了什么吗?

FWIW 我在 2.0 和 1.9.3 上进行了尝试,结果相同。

【问题讨论】:

  • 如果你真的想在视图中定义变量你可以这样做&lt;% @model_class = 'Question' %&gt;
  • 我试过了,得到了undefined local variable or method 'model_class'
  • 不应该将'New %{model}' 改为"New #{@model_name}" 吗?
  • @kiddorails 刚刚尝试过 - 没有骰子。
  • 即使我只用“问题”替换%{model},我仍然只能在视图中看到New...

标签: ruby-on-rails views twitter-bootstrap-rails


【解决方案1】:

在视图中定义事物是一个非常糟糕的主意。如果必须这样做,请将其向上移动到控制器中。

# app/controllers/questions_controller.rb

class QuestionsController < ActionController::Base
  def new
    @question = Question.new
  end
end

# config/locales/questions/en.yml

helpers:
  titles:
    new: new %{model}

# app/views/questions/new.html.erb

<div class="page-header">
  <h1><%= I18n.t('helpers.titles.new', model: @question.class.human) %></h1>
</div>
<%= render :partial => 'form' %>

【讨论】:

  • 谢谢,我同意你在视图中定义东西并将其移到控制器中,但我仍然没有在视图中获得模型名称并且没有错误。
  • 我在这里遗漏了什么吗?不应该是&lt;h1&gt;&lt;%=t '.title', :default =&gt; [:'helpers.titles.new', "New %{@model_name}"], :model =&gt; @model_name %&gt;&lt;/h1&gt;
  • 这是[..., "New %{foo}], :foo =&gt; @bar ... 里面放什么并不重要。问题似乎与helpers.title.new 有关。我把它拿出来了,现在可以正常使用了。
【解决方案2】:

我摆脱了助手并且它起作用了。不知道为什么,但这是最终代码:

<div class="page-header">
   <h1><%=t '.title', :default => 'New %{model_name}', :model_name => @model_name %></h1>
</div>
<%= render :partial => 'form' %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    相关资源
    最近更新 更多