rails options_from_collection_for_select
15262 단어 Rails
개시하다
4collection_check_boxes 똑같이 쓸 수 있는데.
options_from_collectoin_for_셀렉트라는 조수법이 있어요.
이것은 이름에서 볼 수 있듯이 select 라벨을 사용할 때의 방법이다
예를 들어, 기존 태그의 이름에서 선택 태그가 자동으로 생성됩니다.
사용법
우선 rails guides의 options. - 네.from_collection_for_select 표시
콜렉션의 결과를 열거한 옵션에 표시된 문자열을 되돌려주고 호출된 결과를valuemethod,text에 옵션 값으로 할당method에 옵션 텍스트로 할당합니다.
이렇게 쓰여 있다.
여느 때처럼 한 번만 보면 이해가 안 돼...
이런 일도 있고.
돌아오는 건 옵션밖에 없어요.따라서 출력 결과의 바깥쪽은 적당한 HTML select 태그로 싸야 한다.
중요한 것은<%= options_from_collection_for_select(:tag_ids, Tag.all, :id, :name) do |tag| %>
.....
<% end %>
이렇게 사용하는 게 아니라 이 옵션입니다.from_collection_for_만약 select 바깥쪽에서 select를 사용한다면<%= select_tag :tag_id ..... %>
반드시 그렇게 해야 한다
실제 사용 방법으로 삼다<%= select_tag :tag_id,
options_from_collection_for_select(Tag.all, :id, :name, params[:tag_id]),
{
prompt: 'タグで絞り込み',
class: 'form-control select_css_tag',
}
%>
이런 느낌.
실제로 사용해볼게요. 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
routes의 설정은 Resources를 사용합니다
모델의 설정은 기본적인 다대다 설정입니다.
controller
articles_controller.rb
class ArticlesController < ApplicationController
def index
@articles = Article.all
end
def new
@article = Article.new
end
def create
article = Article.new(article_params)
tag = Tag.find(params[:tag_id])
if article.save
article.tags << tag
redirect_to articles_path
else
render :new
end
end
private
def article_params
params.require(:article).permit(:title,:tag_id)
end
end
일단create에서article을 저장한 다음article.tags << tag
article태그를 만들고 있습니다.
view<%= form_with model: @article, local: true do |f| %>
<%= f.label :title %>
<%= f.text_field :title %>
<%= select_tag :tag_id,
options_from_collection_for_select(Tag.all, :id, :name, params[:tag_id]),
{
prompt: 'タグを選択',
}
%>
<%= f.submit %>
<% end %>
이런 느낌.
참고로 여러 개의 값을 저장하려면 멀티플렉스를 지정하면 됩니다
<%= form_with model: @article, local: true do |f| %>
<%= f.label :title %>
<%= f.text_field :title %>
<%= select_tag :tag_id,
options_from_collection_for_select(Tag.all, :id, :name, params[:tag_id]),
{
prompt: 'タグを選択',
multiple: true
}
%>
<%= f.submit %>
<% end %>
이렇게 하면 여러 개를 저장할 수 있다.
들키다
나 이거 하다가 눈치챘어.
select_만약 multiple이 사실이라면,params[:tag id]가 배열될 것입니다
controller의create 동작
def create
@article = Article.new(article_params)
@tag = Tag.find(params[:tag_id])
if @article.save
@article.tags << @tag
redirect_to articles_path
else
render :new
end
end
이렇게 해도 여러 개를 저장할 수 있다.
binding.pry로 찾아봤어요.
Tag.find(params[:tag_id])
장소id가 "1", "2"인 경우 10: def create
11: @article = Article.new(article_params)
12: @tag = Tag.find(params[:tag_id])
13: binding.pry
=> 14: if @article.save
15: @article.tags << @tag
16: redirect_to articles_path
17: else
18: render :new
19: end
20: end
[1] pry(#<ArticlesController>)> @tag
=> [#<Tag:0x00007f36182a6d90
id: 1,
name: "Ruby",
created_at: Mon, 11 Feb 2019 06:35:46 UTC +00:00,
updated_at: Mon, 11 Feb 2019 06:35:46 UTC +00:00,
article_id: nil>,
#<Tag:0x00007f36182a6c50
id: 2,
name: "Ruby on Rails",
created_at: Mon, 11 Feb 2019 06:35:58 UTC +00:00,
updated_at: Mon, 11 Feb 2019 06:35:58 UTC +00:00,
article_id: nil>]
[2] pry(#<ArticlesController>)>
이런 느낌으로 잘 지워버렸어요.
Model.나는find가 하나만 가져갈 수 있을 줄 알았기 때문에 대발견이었다.
그리고 이것은 기본적인 일일 수도 있다.정렬 시@article.tags << @tag
문제 없을 거예요.
보통이면 순환을 할게요.@tag.each do |tag|
@article.tags << tag
end
이렇게 끝났어.
종결어.
Reference
이 문제에 관하여(rails options_from_collection_for_select), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sibakenY/items/c1a3025b2ab4d2430735
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
우선 rails guides의 options. - 네.from_collection_for_select 표시
콜렉션의 결과를 열거한 옵션에 표시된 문자열을 되돌려주고 호출된 결과를valuemethod,text에 옵션 값으로 할당method에 옵션 텍스트로 할당합니다.
이렇게 쓰여 있다.
여느 때처럼 한 번만 보면 이해가 안 돼...
이런 일도 있고.
돌아오는 건 옵션밖에 없어요.따라서 출력 결과의 바깥쪽은 적당한 HTML select 태그로 싸야 한다.
중요한 것은
<%= options_from_collection_for_select(:tag_ids, Tag.all, :id, :name) do |tag| %>
.....
<% end %>
이렇게 사용하는 게 아니라 이 옵션입니다.from_collection_for_만약 select 바깥쪽에서 select를 사용한다면<%= select_tag :tag_id ..... %>
반드시 그렇게 해야 한다실제 사용 방법으로 삼다
<%= select_tag :tag_id,
options_from_collection_for_select(Tag.all, :id, :name, params[:tag_id]),
{
prompt: 'タグで絞り込み',
class: 'form-control select_css_tag',
}
%>
이런 느낌.실제로 사용해볼게요. 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
routes의 설정은 Resources를 사용합니다
모델의 설정은 기본적인 다대다 설정입니다.
controller
articles_controller.rb
class ArticlesController < ApplicationController
def index
@articles = Article.all
end
def new
@article = Article.new
end
def create
article = Article.new(article_params)
tag = Tag.find(params[:tag_id])
if article.save
article.tags << tag
redirect_to articles_path
else
render :new
end
end
private
def article_params
params.require(:article).permit(:title,:tag_id)
end
end
일단create에서article을 저장한 다음article.tags << tag
article태그를 만들고 있습니다.
view<%= form_with model: @article, local: true do |f| %>
<%= f.label :title %>
<%= f.text_field :title %>
<%= select_tag :tag_id,
options_from_collection_for_select(Tag.all, :id, :name, params[:tag_id]),
{
prompt: 'タグを選択',
}
%>
<%= f.submit %>
<% end %>
이런 느낌.
참고로 여러 개의 값을 저장하려면 멀티플렉스를 지정하면 됩니다
<%= form_with model: @article, local: true do |f| %>
<%= f.label :title %>
<%= f.text_field :title %>
<%= select_tag :tag_id,
options_from_collection_for_select(Tag.all, :id, :name, params[:tag_id]),
{
prompt: 'タグを選択',
multiple: true
}
%>
<%= f.submit %>
<% end %>
이렇게 하면 여러 개를 저장할 수 있다.
들키다
나 이거 하다가 눈치챘어.
select_만약 multiple이 사실이라면,params[:tag id]가 배열될 것입니다
controller의create 동작
def create
@article = Article.new(article_params)
@tag = Tag.find(params[:tag_id])
if @article.save
@article.tags << @tag
redirect_to articles_path
else
render :new
end
end
이렇게 해도 여러 개를 저장할 수 있다.
binding.pry로 찾아봤어요.
Tag.find(params[:tag_id])
장소id가 "1", "2"인 경우 10: def create
11: @article = Article.new(article_params)
12: @tag = Tag.find(params[:tag_id])
13: binding.pry
=> 14: if @article.save
15: @article.tags << @tag
16: redirect_to articles_path
17: else
18: render :new
19: end
20: end
[1] pry(#<ArticlesController>)> @tag
=> [#<Tag:0x00007f36182a6d90
id: 1,
name: "Ruby",
created_at: Mon, 11 Feb 2019 06:35:46 UTC +00:00,
updated_at: Mon, 11 Feb 2019 06:35:46 UTC +00:00,
article_id: nil>,
#<Tag:0x00007f36182a6c50
id: 2,
name: "Ruby on Rails",
created_at: Mon, 11 Feb 2019 06:35:58 UTC +00:00,
updated_at: Mon, 11 Feb 2019 06:35:58 UTC +00:00,
article_id: nil>]
[2] pry(#<ArticlesController>)>
이런 느낌으로 잘 지워버렸어요.
Model.나는find가 하나만 가져갈 수 있을 줄 알았기 때문에 대발견이었다.
그리고 이것은 기본적인 일일 수도 있다.정렬 시@article.tags << @tag
문제 없을 거예요.
보통이면 순환을 할게요.@tag.each do |tag|
@article.tags << tag
end
이렇게 끝났어.
종결어.
Reference
이 문제에 관하여(rails options_from_collection_for_select), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sibakenY/items/c1a3025b2ab4d2430735
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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
class ArticlesController < ApplicationController
def index
@articles = Article.all
end
def new
@article = Article.new
end
def create
article = Article.new(article_params)
tag = Tag.find(params[:tag_id])
if article.save
article.tags << tag
redirect_to articles_path
else
render :new
end
end
private
def article_params
params.require(:article).permit(:title,:tag_id)
end
end
article.tags << tag
<%= form_with model: @article, local: true do |f| %>
<%= f.label :title %>
<%= f.text_field :title %>
<%= select_tag :tag_id,
options_from_collection_for_select(Tag.all, :id, :name, params[:tag_id]),
{
prompt: 'タグを選択',
}
%>
<%= f.submit %>
<% end %>
<%= form_with model: @article, local: true do |f| %>
<%= f.label :title %>
<%= f.text_field :title %>
<%= select_tag :tag_id,
options_from_collection_for_select(Tag.all, :id, :name, params[:tag_id]),
{
prompt: 'タグを選択',
multiple: true
}
%>
<%= f.submit %>
<% end %>
나 이거 하다가 눈치챘어.
select_만약 multiple이 사실이라면,params[:tag id]가 배열될 것입니다
controller의create 동작
def create
@article = Article.new(article_params)
@tag = Tag.find(params[:tag_id])
if @article.save
@article.tags << @tag
redirect_to articles_path
else
render :new
end
end
이렇게 해도 여러 개를 저장할 수 있다.binding.pry로 찾아봤어요.
Tag.find(params[:tag_id])
장소id가 "1", "2"인 경우
10: def create
11: @article = Article.new(article_params)
12: @tag = Tag.find(params[:tag_id])
13: binding.pry
=> 14: if @article.save
15: @article.tags << @tag
16: redirect_to articles_path
17: else
18: render :new
19: end
20: end
[1] pry(#<ArticlesController>)> @tag
=> [#<Tag:0x00007f36182a6d90
id: 1,
name: "Ruby",
created_at: Mon, 11 Feb 2019 06:35:46 UTC +00:00,
updated_at: Mon, 11 Feb 2019 06:35:46 UTC +00:00,
article_id: nil>,
#<Tag:0x00007f36182a6c50
id: 2,
name: "Ruby on Rails",
created_at: Mon, 11 Feb 2019 06:35:58 UTC +00:00,
updated_at: Mon, 11 Feb 2019 06:35:58 UTC +00:00,
article_id: nil>]
[2] pry(#<ArticlesController>)>
이런 느낌으로 잘 지워버렸어요.Model.나는find가 하나만 가져갈 수 있을 줄 알았기 때문에 대발견이었다.
그리고 이것은 기본적인 일일 수도 있다.정렬 시
@article.tags << @tag
문제 없을 거예요.보통이면 순환을 할게요.
@tag.each do |tag|
@article.tags << tag
end
이렇게 끝났어.종결어.
Reference
이 문제에 관하여(rails options_from_collection_for_select), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sibakenY/items/c1a3025b2ab4d2430735텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)