나는 Rails의 controller,routes의 작법에 대해 생각했다.
10167 단어 Rails
개시하다
나는 이런 보도를 읽었다.
DHH는 Rails 컨트롤러를 어떻게 씁니까
https://postd.cc/how-dhh-organizes-his-rails-controllers/
나는 이 보도를 인용하여 총결하였다
"컨트롤러는 기본 CRUD 동작 index, Show, new, edit,create, 업데이트,destroy만 사용해야 합니다."
DHH 같은 사람하고 생각 중이야.
이 보도에 관한 필자는 의견을 발표하여 마음에 드는 사람에게 보여 주고 싶었다
어쨌든, 나는 컨트롤러를 작은 부분으로 나누어 기본적으로 클라우드를 써 보았다.
또 컨트롤러 증가를 막기 위해 오히려 이해하기 어렵다
사용자와 관련된 것은
users/***_controller.rb
저장되었습니다.
이루어지다
먼저rails new app
rails g model user name
rails g controller users
.
이 정도면 됐어.달성resources :users
이렇게 하면...
crud의 설정이 끝났습니다.
user에 status 추가
그리고user에status열을 추가합니다. 거기에enum을 사용하여active,stop의 속성을 실현합니다rails g migration add_status_to_users
마이그레이션 파일로 사용add_column :users, :status, :integer, default: 0
.
모델 파일에서
user.rbenum status: { active: 0, stop: 1}
이 항목 추가
이렇게 사용자를 만들면status는active의user를 만들 수 있습니다.
여기users active user와stop user의 표시controller로 실현하는 것이 아니라 다른 컨트롤러를 만들어서 실현하는 것이다.
이때rails g controller actives
... 하는 것이 아니다rails g controller users::actives
이렇게 했습니다.
이렇게 되면 controllers/users 이하 activescontroller.rb를 만듭니다.
똑같이rails g controller users:stops
이렇게 했습니다.
다음은 루티스.rb입니다.resources :users do
resources :actives, only: [:index, :create]
resources :stops, only: [:index, :create]
end
이렇게 하면 controllers/이하 stops.controller.rb 좀 찾아볼게요.
다음 서류를 찾아주실 수 있도록.resources :users do
scope module: :users do
resources :actives, only: [:index, :create]
resources :stops, only: [:index, :create]
end
end
이렇게 하면 controllers/users 이하의 파일을 잘 만들 수 있다.
actives_controller.rb,stops_controller.rb 내용은 이런 느낌이에요.
actives_controller.rbclass Users::ActivesController < ApplicationController
def index
@users = User.active
end
def create
user = User.find params[:user_id]
user.active!
redirect_to users_path
end
end
stops_controller.rbclass Users::StopsController < ApplicationController
def index
@users = User.stop
end
def create
user = User.find params[:user_id]
user.stop!
redirect_to users_path
end
end
실제 호출할 때 삽입된routes의 URL 조수는
users/index.html.erb<% @users.each do |user| %>
<p><%= user.name %></p>
<p><%= user.status %></p>
<%= link_to "stop_user", user_stops_path(user), method: :post %>
<%= link_to "active_user", user_actives_path(user), method: :post %>
<% end %>
이렇게 하면 돼.
위의 상황은 stops#create,actives#create에 대한routes이지만 끼워 넣은 경우params[:id]
아니오.params[:user_id]
구문을 사용합니다.
follow 기능
follow와 같은 기능도user와 관계가 있기 때문에users 이하의 controller.나는 rb를 만드는 것이 비교적 좋다고 생각한다.
그래서rails g model follow user_id:integer follow_id:integer
여러 개의 동일한 데이터 저장 방지
models/follow.달성 validate :already_follow
def already_follow
if Follow.exists?(user_id: user_id, follow_id: follow_id)
errors.add(:user_id, "すでにフォローしています")
end
end
이렇게 했습니다.
그리고 나서rails g controller users::follows
follows_controller.달성class Users::FollowsController < ApplicationController
def index
@follow_users = Follow.where(follow_id: session[:user_id])
end
def create
if session[:user_id]
follow = Follow.new(follow_id: session[:user_id], user_id: params[:user_id])
follow.save
redirect_to users_path
else
redirect_to users_path
end
end
end
이렇게 하면 추적 기능을 만들 수 있다.
결실
이렇게 하면user의status와followuser의 기능을 각각 controller에 따라 분리하여 제작할 수 있다.
결과로 삼다
controllers/users 이하의 컨트롤러는user와 관련이 있다는 것을 곧 알 수 있습니다
하나하나의 컨트롤러의 내용은 상당히 간단하다.
거꾸로rails g controller follows
rails g controller actives
rails g controller stops
이렇게 디렉터를 가늘게 만들면 오히려 왠지 모를 수도 있어
만약 컨트롤러가cred만 쓴다면, 나는 반드시 끼워 넣어야 한다고 생각한다.
종결어.
Reference
이 문제에 관하여(나는 Rails의 controller,routes의 작법에 대해 생각했다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sibakenY/items/95e1b09fed5d5de448ad
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
먼저
rails new app
rails g model user name
rails g controller users
.이 정도면 됐어.달성
resources :users
이렇게 하면...crud의 설정이 끝났습니다.
user에 status 추가
그리고user에status열을 추가합니다. 거기에enum을 사용하여active,stop의 속성을 실현합니다rails g migration add_status_to_users
마이그레이션 파일로 사용add_column :users, :status, :integer, default: 0
.
모델 파일에서
user.rbenum status: { active: 0, stop: 1}
이 항목 추가
이렇게 사용자를 만들면status는active의user를 만들 수 있습니다.
여기users active user와stop user의 표시controller로 실현하는 것이 아니라 다른 컨트롤러를 만들어서 실현하는 것이다.
이때rails g controller actives
... 하는 것이 아니다rails g controller users::actives
이렇게 했습니다.
이렇게 되면 controllers/users 이하 activescontroller.rb를 만듭니다.
똑같이rails g controller users:stops
이렇게 했습니다.
다음은 루티스.rb입니다.resources :users do
resources :actives, only: [:index, :create]
resources :stops, only: [:index, :create]
end
이렇게 하면 controllers/이하 stops.controller.rb 좀 찾아볼게요.
다음 서류를 찾아주실 수 있도록.resources :users do
scope module: :users do
resources :actives, only: [:index, :create]
resources :stops, only: [:index, :create]
end
end
이렇게 하면 controllers/users 이하의 파일을 잘 만들 수 있다.
actives_controller.rb,stops_controller.rb 내용은 이런 느낌이에요.
actives_controller.rbclass Users::ActivesController < ApplicationController
def index
@users = User.active
end
def create
user = User.find params[:user_id]
user.active!
redirect_to users_path
end
end
stops_controller.rbclass Users::StopsController < ApplicationController
def index
@users = User.stop
end
def create
user = User.find params[:user_id]
user.stop!
redirect_to users_path
end
end
실제 호출할 때 삽입된routes의 URL 조수는
users/index.html.erb<% @users.each do |user| %>
<p><%= user.name %></p>
<p><%= user.status %></p>
<%= link_to "stop_user", user_stops_path(user), method: :post %>
<%= link_to "active_user", user_actives_path(user), method: :post %>
<% end %>
이렇게 하면 돼.
위의 상황은 stops#create,actives#create에 대한routes이지만 끼워 넣은 경우params[:id]
아니오.params[:user_id]
구문을 사용합니다.
follow 기능
follow와 같은 기능도user와 관계가 있기 때문에users 이하의 controller.나는 rb를 만드는 것이 비교적 좋다고 생각한다.
그래서rails g model follow user_id:integer follow_id:integer
여러 개의 동일한 데이터 저장 방지
models/follow.달성 validate :already_follow
def already_follow
if Follow.exists?(user_id: user_id, follow_id: follow_id)
errors.add(:user_id, "すでにフォローしています")
end
end
이렇게 했습니다.
그리고 나서rails g controller users::follows
follows_controller.달성class Users::FollowsController < ApplicationController
def index
@follow_users = Follow.where(follow_id: session[:user_id])
end
def create
if session[:user_id]
follow = Follow.new(follow_id: session[:user_id], user_id: params[:user_id])
follow.save
redirect_to users_path
else
redirect_to users_path
end
end
end
이렇게 하면 추적 기능을 만들 수 있다.
결실
이렇게 하면user의status와followuser의 기능을 각각 controller에 따라 분리하여 제작할 수 있다.
결과로 삼다
controllers/users 이하의 컨트롤러는user와 관련이 있다는 것을 곧 알 수 있습니다
하나하나의 컨트롤러의 내용은 상당히 간단하다.
거꾸로rails g controller follows
rails g controller actives
rails g controller stops
이렇게 디렉터를 가늘게 만들면 오히려 왠지 모를 수도 있어
만약 컨트롤러가cred만 쓴다면, 나는 반드시 끼워 넣어야 한다고 생각한다.
종결어.
Reference
이 문제에 관하여(나는 Rails의 controller,routes의 작법에 대해 생각했다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sibakenY/items/95e1b09fed5d5de448ad
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
rails g migration add_status_to_users
add_column :users, :status, :integer, default: 0
enum status: { active: 0, stop: 1}
rails g controller actives
rails g controller users::actives
rails g controller users:stops
resources :users do
resources :actives, only: [:index, :create]
resources :stops, only: [:index, :create]
end
resources :users do
scope module: :users do
resources :actives, only: [:index, :create]
resources :stops, only: [:index, :create]
end
end
class Users::ActivesController < ApplicationController
def index
@users = User.active
end
def create
user = User.find params[:user_id]
user.active!
redirect_to users_path
end
end
class Users::StopsController < ApplicationController
def index
@users = User.stop
end
def create
user = User.find params[:user_id]
user.stop!
redirect_to users_path
end
end
<% @users.each do |user| %>
<p><%= user.name %></p>
<p><%= user.status %></p>
<%= link_to "stop_user", user_stops_path(user), method: :post %>
<%= link_to "active_user", user_actives_path(user), method: :post %>
<% end %>
params[:id]
params[:user_id]
follow와 같은 기능도user와 관계가 있기 때문에users 이하의 controller.나는 rb를 만드는 것이 비교적 좋다고 생각한다.
그래서
rails g model follow user_id:integer follow_id:integer
여러 개의 동일한 데이터 저장 방지models/follow.달성
validate :already_follow
def already_follow
if Follow.exists?(user_id: user_id, follow_id: follow_id)
errors.add(:user_id, "すでにフォローしています")
end
end
이렇게 했습니다.그리고 나서
rails g controller users::follows
follows_controller.달성class Users::FollowsController < ApplicationController
def index
@follow_users = Follow.where(follow_id: session[:user_id])
end
def create
if session[:user_id]
follow = Follow.new(follow_id: session[:user_id], user_id: params[:user_id])
follow.save
redirect_to users_path
else
redirect_to users_path
end
end
end
이렇게 하면 추적 기능을 만들 수 있다.결실
이렇게 하면user의status와followuser의 기능을 각각 controller에 따라 분리하여 제작할 수 있다.
결과로 삼다
controllers/users 이하의 컨트롤러는user와 관련이 있다는 것을 곧 알 수 있습니다
하나하나의 컨트롤러의 내용은 상당히 간단하다.
거꾸로rails g controller follows
rails g controller actives
rails g controller stops
이렇게 디렉터를 가늘게 만들면 오히려 왠지 모를 수도 있어
만약 컨트롤러가cred만 쓴다면, 나는 반드시 끼워 넣어야 한다고 생각한다.
종결어.
Reference
이 문제에 관하여(나는 Rails의 controller,routes의 작법에 대해 생각했다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sibakenY/items/95e1b09fed5d5de448ad
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
rails g controller follows
rails g controller actives
rails g controller stops
Reference
이 문제에 관하여(나는 Rails의 controller,routes의 작법에 대해 생각했다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sibakenY/items/95e1b09fed5d5de448ad텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)