rails 콤보 상자를 자동으로 만드는 collectioncheck_boxes

7779 단어 Rails

개시하다


collection_check_나는 박스스라는 아주 편리한 물건이 있다는 것을 알고 사용해 보았다.
예를 들어, 범주를 선택할 때 등록된 범주에서 확인란을 선택할 수 있습니다.

사용법


collection_check_boxes용 rails guides
object 소속 클래스의method의 현재 반환 값을 수집한 checkbox 탭을 되돌려줍니다.
그렇다고 들었습니다.
사용법으로 삼다
<%= collection_check_boxes(:article, :tag_ids, Tag.all, :id, :name) do |tag| %>

  <%= tag.label do %>
    <%= tag.check_box %>
    <%= tag.text %>
  <% end %>

<% end %>

이렇게 사용하실 수 있어요.
이렇게 하면 기존 레이블의 확인란이 작성됩니다.

실제로 사용해볼게요.


먼저

rails new qiita_collection_check_boxes

rails g model article title
rails g model tag name
rails g model article_tags article:references tag:references
rails db:migrate

rails g controller articles 
그렇게 하다
rails routes.열다
resources :articles 
... 로 삼다
articles_컨트롤러 켜기
class ArticlesController < ApplicationController
  def index
    @articles = Article.all 
  end

  def new 
    @article = Article.new 
  end 

  def create 
    @article = Article.new(article_params)
    if @article.save 
      redirect_to articles_path 
    else 
      render :new 
    end 
  end 

  private 

  def article_params 
    params.require(:article).permit(:title, tag_ids: [])
  end   
end
이런 느낌으로.
여기서 가장 중요한 건 빨대 파라미터를
tag_ids: []
장소
아직 구조는 잘 모르지만 컬렉션은check_boxes에서ids를 획득하여 가능한 여러 개로 배열합니다.
그냥 왜 이렇게 자동으로 중간 테이블을 만드는지 모르겠어요.
하지만 어쨌든 이렇게 되면 가운데 테이블도 자동으로 만들어진다.
모델 파일은 이런 느낌이에요.
article_tag.rb
class ArticleTag < ApplicationRecord
  belongs_to :article
  belongs_to :tag
end

article.rb
class Article < ApplicationRecord
    has_many :article_tags
    has_many :tags, through: :article_tags
end
tag.rb

class Tag < ApplicationRecord
    has_many :article_tags
    has_many :articles, through: :article_tags 
end
이렇게 하시면 됩니다.
이제 뷰만 할게요.
 
new.html.erb
<%= form_with model: @article, local: true do |f| %>
    <%= f.label :title %>
    <%= f.text_field :title %>

    <%= collection_check_boxes(:article, :tag_ids, Tag.all, :id, :name) do |tag| %>
        <%= tag.label do %>
            <%= tag.check_box %>
            <%= tag.text %>
        <% end %>
    <% end %>
    <%= f.submit %>
<% end %>
collection_check_boxes
object 소속 클래스의method의 현재 반환 값을 수집한 checkbox 탭을 되돌려줍니다.
이렇게 말하지만
Tag.all를 통해 id,name 방법의 반환 값을 가져옵니다.
tag.label에 있어요.text라고 쓰여 있습니다. 이것은 g입니다.name에서 잘 작동하지 않습니다.
이 점도 구조를 잘 모른다.
근데 이렇게 실행하면...

이런 느낌으로 기존 해시태그가 나왔어요.
종결어.

좋은 웹페이지 즐겨찾기