Rails를 통한 발언 및 분류 링크
개시하다
Ruby on Rails에서 발언(Post) 및 카테고리(Category) 링크를 설치합니다.
모델과 컨트롤러를 생산하지 않습니다.사전에 양해해 주십시오.
운영 환경
- Ruby 2.5.1
- Rails 5.2.3
그림 완성
1. 복선상자에서 발언과 관련된 여러 종류를 선택할 수 있다.
2. 발언 버튼을 클릭한 후 DB로 등록 및 페이지 마이그레이션을 수행합니다.
다대다연관 Post
는 여러 개Category
와 관련이 있고, Category
도 여러 개Post
와 관련이 있다.이것은 다대다의 관계라고 한다.
다대다의 관계는 중간표를 통해 실현된다.
중간Post_category_relations
은 중간 탁자입니다.관련 모델의post_id
와category_id
.
모델
먼저 가운데 탁자의 모형부터 시작한다.Post
용Category
용belongs_to
과 관련이 있다.
app/models/post_category_relation.rbclass PostCategoryRelation < ApplicationRecord
belongs_to :post
belongs_to :category
end
다음은 Post
와 Category
의 모형이다.
중간 표의 모델post_category_relations
은 has_many
과 관련이 있다.
app/models/post.rbclass Post < ApplicationRecord
has_many :post_category_relations
has_many :categories, through: :post_category_relations
end
app/models/category.rbclass Category < ApplicationRecord
has_many :post_category_relations
has_many :posts, through: :post_category_relations
end
또한Post
Category
용Category
용Post
과 관련된다.
이곳의 중점은 has_many
이다.
중간표through: :post_category_relations
를 통해 연관된다는 뜻이다.
또한 post_category_relations
에 대한 관련은 중간표를 먼저 기술하지 않으면 has_many
오류가 발생할 수 있으니 주의하십시오.
뷰
이것은 등록 투고의 화면이다.
상기 다대다 관련에 따라ActiveRecord::HasManyThroughOrderError
대상에 post
속성이 추가되었다.
app/views/posts/new.html.erb<%= form_with model: @post do |f| %>
<p>
<%= f.label :title, '題目' %>
<%= f.text_field :title %>
</p>
<p>
<%= f.label :body, '本文'%>
<%= f.text_field :body %>
</p>
<p>
<%= f.label :category, 'カテゴリ' %>
<%= f.collection_check_boxes(:category_ids, Category.all, :id, :name) do |category| %>
<%= category.label do %>
<%= category.check_box %>
<%= category.text %>
<% end %>
<% end %>
</p>
<%= f.submit '投稿する' %>
<% end %>
category_ids
방법으로 복선상자를 만들어서 기존 클래스의 수량만 만들 수 있습니다.매개변수의 내용은 다음과 같습니다.
1. 복선상자에서 발언과 관련된 여러 종류를 선택할 수 있다.
2. 발언 버튼을 클릭한 후 DB로 등록 및 페이지 마이그레이션을 수행합니다.
다대다연관 Post
는 여러 개Category
와 관련이 있고, Category
도 여러 개Post
와 관련이 있다.이것은 다대다의 관계라고 한다.
다대다의 관계는 중간표를 통해 실현된다.
중간Post_category_relations
은 중간 탁자입니다.관련 모델의post_id
와category_id
.
모델
먼저 가운데 탁자의 모형부터 시작한다.Post
용Category
용belongs_to
과 관련이 있다.
app/models/post_category_relation.rbclass PostCategoryRelation < ApplicationRecord
belongs_to :post
belongs_to :category
end
다음은 Post
와 Category
의 모형이다.
중간 표의 모델post_category_relations
은 has_many
과 관련이 있다.
app/models/post.rbclass Post < ApplicationRecord
has_many :post_category_relations
has_many :categories, through: :post_category_relations
end
app/models/category.rbclass Category < ApplicationRecord
has_many :post_category_relations
has_many :posts, through: :post_category_relations
end
또한Post
Category
용Category
용Post
과 관련된다.
이곳의 중점은 has_many
이다.
중간표through: :post_category_relations
를 통해 연관된다는 뜻이다.
또한 post_category_relations
에 대한 관련은 중간표를 먼저 기술하지 않으면 has_many
오류가 발생할 수 있으니 주의하십시오.
뷰
이것은 등록 투고의 화면이다.
상기 다대다 관련에 따라ActiveRecord::HasManyThroughOrderError
대상에 post
속성이 추가되었다.
app/views/posts/new.html.erb<%= form_with model: @post do |f| %>
<p>
<%= f.label :title, '題目' %>
<%= f.text_field :title %>
</p>
<p>
<%= f.label :body, '本文'%>
<%= f.text_field :body %>
</p>
<p>
<%= f.label :category, 'カテゴリ' %>
<%= f.collection_check_boxes(:category_ids, Category.all, :id, :name) do |category| %>
<%= category.label do %>
<%= category.check_box %>
<%= category.text %>
<% end %>
<% end %>
</p>
<%= f.submit '投稿する' %>
<% end %>
category_ids
방법으로 복선상자를 만들어서 기존 클래스의 수량만 만들 수 있습니다.매개변수의 내용은 다음과 같습니다.
class PostCategoryRelation < ApplicationRecord
belongs_to :post
belongs_to :category
end
class Post < ApplicationRecord
has_many :post_category_relations
has_many :categories, through: :post_category_relations
end
class Category < ApplicationRecord
has_many :post_category_relations
has_many :posts, through: :post_category_relations
end
이것은 등록 투고의 화면이다.
상기 다대다 관련에 따라
ActiveRecord::HasManyThroughOrderError
대상에 post
속성이 추가되었다.app/views/posts/new.html.erb
<%= form_with model: @post do |f| %>
<p>
<%= f.label :title, '題目' %>
<%= f.text_field :title %>
</p>
<p>
<%= f.label :body, '本文'%>
<%= f.text_field :body %>
</p>
<p>
<%= f.label :category, 'カテゴリ' %>
<%= f.collection_check_boxes(:category_ids, Category.all, :id, :name) do |category| %>
<%= category.label do %>
<%= category.check_box %>
<%= category.text %>
<% end %>
<% end %>
</p>
<%= f.submit '投稿する' %>
<% end %>
category_ids
방법으로 복선상자를 만들어서 기존 클래스의 수량만 만들 수 있습니다.매개변수의 내용은 다음과 같습니다.collection_check_boxes
:category_ids
대상의 속성 명칭post
Category.all
대상의 배열 획득category
복선상자의value 속성의 값:id
복선상자의 탭 이름컨트롤러
이번에 등록 투고하면 그 투고의 상세한 페이지로 옮길 것이다.
투고와 관련된 종류는 등록 발언할 때의 매개 변수에 포함되어 있기 때문에strongparameters를 사용합니다.
app/controller/posts_controller.rbclass PostsController < ApplicationController
def new
@post = Post.new
end
def create
@post = Post.create(post_params)
redirect_to @post
end
def show
@post = Post.find(params[:id])
end
private
def post_params
params.require(:post).permit(:title, :body, category_ids: [])
end
end
요점은 :name
방법의 post_params
이다.
발언과 관련된 분류는 복선상자를 통해 여러 개를 전달하기 때문에 배열 형식으로 기록된다.
기타
샘플로 먼저 컨트롤러에서 분류 이름을 로그인합니다.category_ids: []
콘솔을 시작하고 다음 코드를 입력합니다.%W[Ruby Java Python Go].each { |sample| Category.create(name: sample) }
등록 발언 후 이전된view 파일(발언의 상세한 페이지)은 다음과 같은 내용을 사용합니다.
app/views/posts/show.html.erb<p><%= "【題目】#{@post.title}" %></p>
<p><%= "【本文】#{@post.body}" %></p>
<span>【カテゴリ】</span>
<% @post.categories.each do |category| %>
<%= category.name %>
<% end %>
경로는 다음과 같습니다.
config/routes.rb Rails.application.routes.draw do
resources :posts, only: [:show, :new, :create]
end
끝맺다 $ rails c
서버가 시작되면 방문$ rails s
에 발언 등록 화면이 표시됩니다.
완성된 이미지에 따라 투고와 분류를 연결해서 로그인할 수 있습니다👏
Reference
이 문제에 관하여(Rails를 통한 발언 및 분류 링크), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/cawaz3/items/e755a58177212f2aca6c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
class PostsController < ApplicationController
def new
@post = Post.new
end
def create
@post = Post.create(post_params)
redirect_to @post
end
def show
@post = Post.find(params[:id])
end
private
def post_params
params.require(:post).permit(:title, :body, category_ids: [])
end
end
샘플로 먼저 컨트롤러에서 분류 이름을 로그인합니다.
category_ids: []
콘솔을 시작하고 다음 코드를 입력합니다.%W[Ruby Java Python Go].each { |sample| Category.create(name: sample) }
등록 발언 후 이전된view 파일(발언의 상세한 페이지)은 다음과 같은 내용을 사용합니다.app/views/posts/show.html.erb
<p><%= "【題目】#{@post.title}" %></p>
<p><%= "【本文】#{@post.body}" %></p>
<span>【カテゴリ】</span>
<% @post.categories.each do |category| %>
<%= category.name %>
<% end %>
경로는 다음과 같습니다.config/routes.rb
Rails.application.routes.draw do
resources :posts, only: [:show, :new, :create]
end
끝맺다 $ rails c
서버가 시작되면 방문$ rails s
에 발언 등록 화면이 표시됩니다.
완성된 이미지에 따라 투고와 분류를 연결해서 로그인할 수 있습니다👏
Reference
이 문제에 관하여(Rails를 통한 발언 및 분류 링크), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/cawaz3/items/e755a58177212f2aca6c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Rails를 통한 발언 및 분류 링크), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/cawaz3/items/e755a58177212f2aca6c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)