2014-09-19 48 views
1

我使用的軌道4一起謀害我routes.rb寫着:更新的路線只顯示資源/新相比,用戶/ USER_ID /資源/新

devise_for :users, :path => '', 
    :path_names => {:sign_in => 'login', :sign_out => 'logout', :sign_up => 'register'}, 
    controllers: { registrations: "registrations", omniauth_callbacks: 'omniauth_callbacks' } do 
    get "/login" => "devise/sessions#new" 
    get "/signup" => "devise/registrations#new" 
    get "/logout" => "devise/sessions#destroy" 
    get "/login" => "devise/sessions#new" 
end 


resources :users, :only => [:show, :index], :path => "bloggers" do 
    resources :posts, :path => "articles" 
end 

現在,當我創建一個新的崗位作爲目前登錄的用戶(可以說ID是1)。 Post -> New操作的URL爲 - >https://localhost:3000/bloggers/1/articles/new,但我想顯示 https://localhost:3000/articles/new,因爲該帖子的新操作應始終與current_user關聯。

我會想象這是可能的,但不知道如何去做。

也是user has_many posts

請幫忙嗎?

回答

1

認證

很簡單,實際上是:

#config/routes.rb 
# If you have overridden "path_names", you don't need other paths for Devise 
devise_for :users, :path => '', 
    :path_names => {:sign_in => 'login', :sign_out => 'logout', :sign_up => 'register'}, 
    controllers: { registrations: "registrations", omniauth_callbacks: 'omniauth_callbacks' } 

resources :posts, as: "articles", path: "articles" 

#app/controllers/application_controller.rb 
class ApplicationController < ActionController::Base 
    before_action :authenticate_user!, except: :index 

    def index 
     #Stuff here 
    end 

end 

這裏的底線是,只要你想使用經過驗證的區域(特別是與設計),你只需要「保護」 controller#actions你想限制訪問權限。美麗的是,你可以使用authenticate_user!輔助方法來完成這些工作

此外,你將能夠在你的控制器中調用current_user(不必像現在這樣設置用戶) :

#app/controllers/posts_controller.rb 
class PostsController < ApplicationController 
    def new 
     @post = current_user.posts.new 
    end 

    def create 
     @post = current_user.posts.new post_params 
     @post.save 
    end 

    private 

    def post_params 
     params.require(:post).permit(:x, :y, :z) 
    end 
end 
+1

正是我在找什麼。謝謝。 :) – Amey 2014-09-20 20:27:19