【问题标题】:Create a Page for Controller Action为控制器操作创建页面
【发布时间】:2013-09-26 07:12:47
【问题描述】:

我之前创建了一个User/Show Page 执行以下步骤:

路线:

# User Profile
  get "users/show"
  get 'user/:id' => 'users#show', as: :user

在我的 users_controller:

def show
  @user = User.find_by_user_name(params[:id])  # For Name instead of ID
end

现在我创建了一个Albums Scaffold,我想做同样的事情:

路线:

# User Albums
  get "users/albums"
  get 'user/:id/albums' => 'users#albums'

并添加到我的 users_controller:

def albums
  @user = User.find_by_user_name(params[:id])  # For Name instead of ID
  @albums = @user.albums
end

在 rake 路线上,我得到以下信息

          users_show GET      /users/show(.:format)            users#show
                user GET      /user/:id(.:format)              users#show
        users_albums GET      /users/albums(.:format)          users#albums
                     GET      /user/:id/albums(.:format)       users#albums

首先这是一个好习惯吗?,其次它不起作用:)

如果我尝试直接访问:

http://localhost:3000/user/username/albums

它有效。

【问题讨论】:

  • 为什么有 4 条路由指向 2 个动作?你想在每个场景中完成什么?我认为这不是好的做法,因为我无法通过查看此内容来理解您要完成的工作。
  • 我正在尝试让 url localhost:300/user/username/albums 显示该用户的相册
  • /users/albums 做了什么?为什么会在那里?
  • 嗯,我正在执行与设置用户显示页面相同的步骤。我对rails很陌生,请原谅我。如果你有解决方案,你介意回答。

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


【解决方案1】:

我完全同意其他海报的观点,即您应该为您的路线使用资源。但是,您似乎遇到的问题是用设计来描述您的路线。

举个例子,你的路线应该是这样的:

devise_for :users
  devise_scope :user do
    resources :albums
  end

devise docs 在“配置路由”下简要提到了使用 devise_scope。

【讨论】:

    【解决方案2】:

    这不是一个好习惯。资源更好。

    由于相册也是资源,所以可以使用嵌套资源。

    resources :user do
      resources :albums
    end
    

    【讨论】:

    • 我已经 devise_for :users,但不能 rake route :/ 这是问题吗?
    【解决方案3】:

    您可以使用 RESTful 声明:

    resources :users do
        member do
            get 'albums'
        end
    end
    

    这将为用户创建所有 RESTful 路由,并在 UsersController (albums_path) 中创建到相册方法的路径。

    如果您尝试建立关系,我会使用:

    resources :users do
        resources :albums
    end
    

    【讨论】:

    • 我已经有 devise_for :users 并且它不让我耙路线。 ://
    • 我让你的第一个代码工作了。在我现在的路线中-> pastebin.com/S7zfLHpA .. 你看看专辑的第二条路线如何指向 user#index 并缺少所需的密钥:id
    • 由于相册是一种资源,因此需要将其描述为一个资源。第一个代码仅为用户(相册)创建一个操作。第二个 sn-p 为关系创建路由(在模型中你应该有 belongs_to :user (对于 User.rb)和 has_many :albums (对于 Album.rb)。
    • 模型设置正确,我只是找不到正确的方式来描述我的路线。
    • 您还应该有一个相册控制器。正确设置关系后,您应该能够执行 users/albums/:id/:album_id ,第一个 id 是用户 id。在你的用户控制器中使用相册作为一种方法并不是这种资源的方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    • 2010-10-22
    • 1970-01-01
    相关资源
    最近更新 更多