Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 基于用户输入的Rails根路径_Ruby On Rails_Ruby On Rails 4_Routing - Fatal编程技术网

Ruby on rails 基于用户输入的Rails根路径

Ruby on rails 基于用户输入的Rails根路径,ruby-on-rails,ruby-on-rails-4,routing,Ruby On Rails,Ruby On Rails 4,Routing,我需要让用户选择一个根路径(或get)作为他创建的许多页面之一。这意味着,我希望能够创建页面“奇妙的页面”,并将其设置为首页() 这有可能吗?我已尝试将用户发送到固定操作,并将用户重定向到所选操作,但这给我留下了如下路径: 我期望的结果是: (而页面是用户选择的页面) 感谢您的帮助:) 编辑:我需要澄清。我希望用户能够选择页面或照片。这意味着我需要用户能够选择控制器和动作 大概是这样的: constraints(Subdomain) do get "/" => '#{user_se

我需要让用户选择一个根路径(或get)作为他创建的许多页面之一。这意味着,我希望能够创建页面“奇妙的页面”,并将其设置为首页()

这有可能吗?我已尝试将用户发送到固定操作,并将用户重定向到所选操作,但这给我留下了如下路径:

我期望的结果是: (而页面是用户选择的页面)

感谢您的帮助:)

编辑:我需要澄清。我希望用户能够选择页面或照片。这意味着我需要用户能够选择控制器和动作

大概是这样的:

constraints(Subdomain) do
    get "/" => '#{user_selected_controller}#{user_selected_action}/#{:id}'
end
# Set a page as the home screen
post 'pages/set_home/:id' => 'pages#set_home', as: :set_home_page

# User selected Home screen
get "/" => 'users#home'

上面的代码是完全错误的。但我认为它说明了我想要完成的任务。

您应该从控制器显式呈现页面视图

config/routes.rb

root to: 'home#index'
控制器/home_controller.rb:

def index
  @page = #get fantastic page
  render 'pages/page', page: @page
end

请参阅。

我不是通过路由解决了这个问题,而是通过创建页面和库与users表的多态关联解决了这个问题。像这样:

首先创建多态关联

# In my page model
has_one :user, :as => :home

# In my Gallery model
has_one :user, :as => :home

# In my User model
belongs_to :home, polymorphic: true
然后,我在users\u控制器中将其用作我的控制器:

def home
    # Multitenant rails app. This refers to user who owns the subdomain visited.
    @user = current_tenant

    # This is not optimal, results in two queries.
    if @user.home_type.classify.constantize.exists?(@user.home_id)

        # This is the same as @page = Page.find(params[:id])
        instance_variable_set("@#{@user.home_type.downcase}", @user.home_type.classify.constantize.find(@user.home_id))

        # this is the same as render 'pages/show', layout: false
        render "#{@user.home_type.downcase.pluralize}/show", layout: false
    else
        redirect_to photos_path
    end

end
我的路线如下所示:

constraints(Subdomain) do
    get "/" => '#{user_selected_controller}#{user_selected_action}/#{:id}'
end
# Set a page as the home screen
post 'pages/set_home/:id' => 'pages#set_home', as: :set_home_page

# User selected Home screen
get "/" => 'users#home'
设置主页:

# In pages_controller
  def set_home
    @user = current_user
    @user.home = @page
    if @user.save
      redirect_to pages_path, notice: "Home screen set to #{@page.title}"
    else
      redirect_to pages_path, alert: "An error occured. Home not set."
    end
  end
通过这种方式,我可以通过users.home变量加载相关资源,同时使用到用户控制器home操作的正常路由


这可能是一个效率低下的解决方案,但这是我唯一能想到的解决方案。请随时提出改进建议:)

这可能重复听起来更像是选择正确路由的帮助器方法的问题,而不是动态路由。这样的帮助器方法看起来如何?