【问题标题】:Passing parameters to Rails 3 template in generator在生成器中将参数传递给 Rails 3 模板
【发布时间】:2011-08-09 04:58:21
【问题描述】:

在 Rails 2 生成器中,可以通过以下方式将数据传递给 template

record.template(
  "src.html.erb",
  "dest.html.erb",
  :assigns => { :id => id, :name => name }

在 Rails 3 中,template 似乎是新方法。不幸的是,看起来第三个参数config 只接受:verbose 选项。尝试通过:assigns 传递值似乎不起作用。

有人知道如何将动态值传递给我的 Rails 3 模板吗?

【问题讨论】:

    标签: ruby-on-rails-3 templates code-generation generator


    【解决方案1】:

    在 Rails 3 中将参数传递给视图的示例。

    https://github.com/rails/rails/blob/master/railties/lib/rails/generators/erb/controller/controller_generator.rb

    # ...
    actions.each do |action|
      @action = action
      @path = File.join(base_path, filename_with_extensions(action))
      template filename_with_extensions(:view), @path
    end
    

    模板:

    https://github.com/rails/rails/blob/master/railties/lib/rails/generators/erb/controller/templates/view.html.erb

    <h1><%= class_name %>#<%= @action %></h1>
    <p>Find me in <%= @path %></p>
    

    【讨论】:

    • 不错!可以在标准 rails 脚手架生成命令行中传递操作吗?
    【解决方案2】:

    Rails 3 模板可以访问生成器中的任何方法,因此在上述情况下,如果您的生成器具有方法 name 和方法 id,则无需更改模板中的任何内容。查看 RailsCast 以在 Rails 3 中创建生成器http://railscasts.com/episodes/218-making-generators-in-rails-3

    【讨论】:

    • 嗯,我有一个each 循环,其中有一个变量需要传递给模板以生成具有多个名称的相同模板。我解决这个问题的方法是在全局范围内定义迭代值(通过@ 符号,不确定这被称为什么),然后在生成器中创建一个只返回这个值的方法。该方法可以被模板访问。
    猜你喜欢
    • 2014-06-26
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多