如何使用数据库中的数据在rails中创建动态功能名称?我不知道这是否可能。
以下是我的目标示例
class PageController < ApplicationController def (PageModel.find(1)) #def stay #codes here #codes here end #end end
我知道语法错误。请帮助,谢谢
更新
此功能只能通过路线调用,在我的路线中我有这条线
匹配“/:action”,:controller =&gt; “page”,:via =&gt; “获取”
如果手动生成,该函数将如下所示
def stay #some query render 'stay_page', :layout => 'stay_page_layout' end def pleasure #some query render 'pleasure _page', :layout => 'pleasure _page_layout' end
答案 0 :(得分:0)
假设您的PageModel
有page_id
和page_name
,您的网址会以page_id
作为参数,并会使用page_name
呈现。
控制器代码:
class PageController < ApplicationController
def dynamic_action
page_name = PageModel.find(params[:page_id]).page_name
render "#{page_name}_page", :layout => "#{page_name}_page_layout"
end
end
路线:
match '/:page_id' => 'page#dynamic_action'
答案 1 :(得分:0)
在routes.rb
:
# Either this...
get "pages/:page", to: "pages#page"
# Or this, but make sure this is the last route in the file
get "/:page", to: "pages#page"
你的控制器:
class PageController < ApplicationController
def page
@page = PageModel.find(params[:page])
end
end
如果您只需要根据页面呈现不同的模板,则可以执行以下操作:
def page
@page = PageModel.find(params[:page])
render @page.name
end
如果您需要自定义逻辑,您可以执行以下操作:
VALID_PAGES = ["contact_us"]
def page
@page = PageModel.find(params[:page])
execute(@page.name)
end
def execute(name)
if VALID_PAGES.include?(name)
send(name)
end
end
def contact_us
# do stuff
end