我想要实现的目标相对简单。我在页面模型中为每种页面类型设置了不同的范围。所以在我的控制器中我这样做,
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
因此,对于我想知道的更有见地的答案,方法调用不是字符串或符号,它是什么?
如何修复当前的问题?
由于
答案 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?
,这样可以获得您所追求的目标。