는 show
는 edit
는 update
는 destroy
행동은 정확하게 모든 구성원 작업입니다. 그들은 모델을 찾아야하는 유일한 존재입니다.
나만의 회원 활동이 있다면 직접 회원 목록에 추가해야합니다.
before_action :set_item, only: [:edit, ..., :my_member_action]
또는 당신이 그것을 필요로하지 않는 모든 수집 작업을 제외 할 :except
옵션을 사용할 수 있습니다
before_action :set_item, except: [:index, :create]
이 방법을, 다른 멤버 조치를 추가하는 경우를, 당신은 늘 아무것도 변경해야 . 개인적으로 나는 명시 적으로 선호하고 :only
을 사용하는 것을 선호합니다.
나는 쉬운 방법이 없다고 확신합니다. 자동으로 모든 회원 활동을 감지 할 수는 없습니다.
편집는 :
정말
당신은 controller_name
방법으로 컨트롤러의 이름에 액세스 할 수 있습니다 ... 당신이 그렇게해야한다고 생각하지만,하지 않습니다.
컨트롤러에 관련된 경로를 얻기 :
routes = Rails.application.routes.routes.select { |r| r.defaults[:controller] == controller_name }
그런 다음, 나는 경로가 구성원 경로가 @parts
배열 :id
이 포함되어 있다는 것입니다 경우 가장 좋은 방법은 볼 생각합니다. 어쩌면 당신은 더 튼튼한 방법을 찾을 수 있습니다.
그래서 내가 할 것이다 :
routes.select { |r| r.parts.include?(:id) }.map { |r| r.defaults[:action] }.map &:to_sym
당신을 줄 것이다 그 : [:show, :preview, :my_challenges]
에 대한
resources :users, only: [:index, :show], controller: 'accounts/users' do
member do
get :preview
get :my_challenges
end
end
class ApplicationController < ActionController::Base
def member_routes
Rails.application.routes.routes
.select { |r| r.defaults[:controller] == controller_name && r.parts.include?(:id) }
.map { |r| r.defaults[:action] }
.map(&:to_sym)
end
end
class UsersController < ApplicationController
before_action set_model, only: member_routes
end
routes.rb에서 추가 회원 작업을 정의 할 수 있습니다. 맞습니까? 그래서 나는 그것들도 포함시키고 싶습니다. – fotanus
그래, 내가 말했듯이, 당신은 단지 2 개의 선택 만 갖고, 당신의'my_member_action'액션을리스트에 추가하거나': except'를 사용한다. – Robin
모든 요령을 사용하여 모든 회원 경로를 얻고 나를위한 목록을 생성합니다 :-) – fotanus