Rails API 문서를 살펴보고 신기합니다 collection_select
.
제목은 다음과 같습니다.
collection_select(object, method, collection, value_method, text_method, options = {}, html_options = {})
그리고 이것이 그들이 제공하는 유일한 샘플 코드입니다 :
collection_select(:post, :author_id, Author.all, :id, :name_with_initial, :prompt => true)
누군가 간단한 연결 ( User
has_many Plans
및 a에 Plan
속함 User
)을 사용하여 구문에서 사용하고 싶은 이유와 이유를 설명 할 수 있습니까?
편집 1 : 또한 form_helper
일반 양식이나 내부 양식이 어떻게 작동하는지 설명하면 멋질 것 입니다. 웹 개발을 이해하지만 Rails의 ‘상대적으로 새로운’웹 개발자에게 이것을 설명한다고 상상해보십시오. 어떻게 설명하겠습니까?
답변
collection_select(
:post, # field namespace
:author_id, # field name
# result of these two params will be: <select name="post[author_id]">...
# then you should specify some collection or array of rows.
# It can be Author.where(..).order(..) or something like that.
# In your example it is:
Author.all,
# then you should specify methods for generating options
:id, # this is name of method that will be called for every row, result will be set as key
:name_with_initial, # this is name of method that will be called for every row, result will be set as value
# as a result, every option will be generated by the following rule:
# <option value=#{author.id}>#{author.name_with_initial}</option>
# 'author' is an element in the collection or array
:prompt => true # then you can specify some params. You can find them in the docs.
)
또는 예제는 다음 코드로 표현할 수 있습니다.
<select name="post[author_id]">
<% Author.all.each do |author| %>
<option value="<%= author.id %>"><%= author.name_with_initial %></option>
<% end %>
</select>
이것은에 문서화되어 있지 FormBuilder
않지만FormOptionsHelper
답변
나는 select 태그의 순열에 꽤 많은 시간을 보냈다.
collection_select
객체 컬렉션에서 select 태그를 작성합니다. 이것을 명심하고
object
: 객체의 이름입니다. 태그 이름을 생성하는 데 사용되며 선택한 값을 생성하는 데 사용됩니다. 실제 객체이거나 심볼 일 수 있습니다. 후자의 경우 해당 이름의 인스턴스 변수 는 바인딩에서 찾을 수 있습니다ActionController
(즉, 컨트롤러에서 :post
호출 @post
된 인스턴스 var를 찾습니다 ).
method
: 메소드 이름. 태그의 이름을 생성하는 데 사용됩니다. 즉, 선택에서 가져 오려는 객체의 속성
collection
: 객체 모음
value_method
: 콜렉션의 각 오브젝트에 대해이 메소드는 값에 사용됩니다.
text_method
: 컬렉션의 각 개체에 대해이 방법은 텍스트를 표시하는 데 사용됩니다
선택적 매개 변수 :
options
: 전달할 수있는 옵션. 여기 에는 옵션 제목 아래에 설명되어 있습니다 .
html_options
: 여기에 전달 된 것은 생성 된 html 태그에 추가됩니다. 클래스, id 또는 다른 속성을 제공하려면 여기로 이동하십시오.
협회는 다음과 같이 작성할 수 있습니다.
collection_select(:user, :plan_ids, Plan.all, :id, :name, {:prompt => true, :multiple=>true })
예를 들어 form_for
에 포함 된 모든 태그에 대해 다시 매우 간단한 용어 로을 사용하는 것과 관련하여 form_for
. f.text_field
첫 번째 ( object
) 매개 변수 를 제공 할 필요는 없습니다 . 이것은 form_for
구문 에서 가져옵니다 .