在ruby中使用变量作为方法

时间:2014-08-10 23:17:29

标签: ruby-on-rails ruby

我想要实现的目标相对简单。我在页面模型中为每种页面类型设置了不同的范围。所以在我的控制器中我这样做,

  def employer
    @body_class = "employer membership"
    is_page_present?(:employer_pages) #this checks to see if a page has user generated content for the controller action
  end 

private 

  def set_panel_sections(page)
    @page_data = CorporatePage.page.last
    @section_one = @page_data.corporate_panels.section_one
    @section_two = @page_data.corporate_panels.section_two
  end

  def is_page_present?(page_type)
    if CorporatePage.("#{page_type}").any?
      raise
      set_panel_sections(page_type)
    else
      @section_one = nil
    end
  end

我尝试了不同的变体,包括没有连接,但都无济于事。

我收到错误

undefined method `call' for #<Class:0x007f833b40b8f0>

没有连接我得到undefined method page_type

但是在我的rails控制台中,我可以做到这一点..

2.1.2 :001 > CorporatePage.employer_page.any?
   (19.2ms)  SELECT COUNT(*) FROM `corporate_pages`  WHERE `corporate_pages`.`static_descriptor` = 'employer'
 => true 
2.1.2 :002 > CorporatePage.employee_page.any?
   (0.5ms)  SELECT COUNT(*) FROM `corporate_pages`  WHERE `corporate_pages`.`static_descriptor` = 'employee'
 => false 

因此,对于我想知道的更有见地的答案,方法调用不是字符串或符号,它是什么?

如何修复当前的问题?

由于

2 个答案:

答案 0 :(得分:1)

您想要的是send

  def is_page_present?(page_type)
    if CorporatePage.send(page_type).any?         
      set_panel_sections(page_type)
    else
      @section_one = nil
    end
  end

send将调用类实例page_type处定义的方法。

答案 1 :(得分:0)

您需要使用send方法。你可以在这里找到它的基本解释:http://ruby-doc.org/core-2.1.2/Object.html#method-i-send

在您的情况下,您可以将if CorporatePage.("#{page_type}").any?更改为if CorporatePage.send(page_type).any?,这样可以获得您所追求的目标。