【问题标题】:Dynamically create methods in Controller (RAILS)在 Controller (RAILS) 中动态创建方法
【发布时间】:2016-05-03 10:44:23
【问题描述】:

我正在尝试为半静态页面动态创建方法。但是,下面的代码似乎不起作用。我收到 wrong number of arguments (0 for 1) 错误。

class PagesController < ApplicationController

  pages = %w[ page1 page2 page3 ]

  pages.each do |page|          
    define_method(page) do |a|
      #do nothing
    end
  end
end

【问题讨论】:

  • 那是哪条线/方法?
  • define_method(page) 做 |a|
  • 另外,你想用这个实现什么?它可能有一个更简单的解决方案。
  • PagesController#page1 中的ArgumentError,参数数量错误(0 代表 1)
  • 只是试图动态定义页面方法。例如def page1 end, def page2 end 等等。

标签: ruby-on-rails ruby-on-rails-4 controller metaprogramming


【解决方案1】:

您是说:page1 方法(:page2:page3 也是)有一个参数(a),但控制器操作没有参数,它们从 params 哈希接收值。

编辑:只需从您的代码中删除 |a|

define_method(page) do
  #do nothing
end

【讨论】:

    【解决方案2】:

    不带参数的块:

    class PagesController < ApplicationController
    
      pages = %w[ page1 page2 page3 ]
    
      pages.each do |page|          
        define_method(page) do
          #do nothing
        end
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-05
      • 1970-01-01
      • 2011-03-08
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多