[RUBY-ON-RAILS] 루비 온 레일즈 : 형태로 배열 제출
RUBY-ON-RAILS루비 온 레일즈 : 형태로 배열 제출
나는 배열 인 속성이 모델을 가지고있다. 양식 제출에서 해당 속성을 채울 수 나를 위해 적절한 방법은 무엇입니까?
I 이름 브래킷을 포함하는 입력으로부터의 해시를 생성하는 필드 양식 입력을 갖는 것을 알고있다. 난 그냥 그것을 복용하고 배열로 마사지 컨트롤러에 단계별로해야 하는가?
예 덜 추상적 만들려면 :
class Article
serialize :links, Array
end
링크 변수 (A)의 URL을 배열, 즉 [ "http://www.google.com"], [ "http://stackoverflow.com"]을 형태를 취
나는 내 양식에 다음과 같은 것을 사용하면 해시를 생성합니다 :
<%= hidden_field_tag "article[links][#{url}]", :track, :value => nil %>
생성 된 해시는 다음과 같습니다 :
"links" => {"http://www.google.com" => "", "http://stackoverflow.com" => ""}
내가 링크의 이름에 URL을 포함하지 않는 경우, 추가 값은 서로 소지품 :
<%= hidden_field_tag "article[links]", :track, :value => url %>
이 같은 결과 외모 : "링크"=> "http://stackoverflow.com"
해결법
-
==============================
1.당신의 HTML 양식이 빈 대괄호로 입력 필드를 가지고 있다면, 그들은 컨트롤러에 PARAMS 내부 배열로 설정됩니다.
당신의 HTML 양식이 빈 대괄호로 입력 필드를 가지고 있다면, 그들은 컨트롤러에 PARAMS 내부 배열로 설정됩니다.
# Eg multiple input fields all with the same name: <input type="textbox" name="course[track_codes][]" ...> # will become the Array params["course"]["track_codes"] # with an element for each of the input fields with the same name
추가 :
레일 도우미가 자동 마술 배열 트릭을하도록 설정되지 않습니다. 수동으로 이름 속성을 만들어야 할 수도 있습니다 그래서. 체크 박스 도우미가되지 않은 경우를 처리하기 위해 추가 숨겨진 필드를 만들 수 있기 때문에 레일 헬퍼를 사용하는 경우 또한, 체크 박스는 자신의 문제를 가지고있다.
-
==============================
2.
= simple_form_for @article do |f| = f.input_field :name, multiple: true = f.input_field :name, multiple: true = f.submit
-
==============================
3.TL; HTML [] 협약 DR 버전 :
TL; HTML [] 협약 DR 버전 :
<input type="textbox" name="course[track_codes][]", value="a"> <input type="textbox" name="course[track_codes][]", value="b"> <input type="textbox" name="course[track_codes][]", value="c">
PARAMS 수신 :
{ course: { track_codes: ['a', 'b', 'c'] } }
<input type="textbox" name="course[track_codes][x]", value="a"> <input type="textbox" name="course[track_codes][y]", value="b"> <input type="textbox" name="course[track_codes][z]", value="c">
PARAMS 수신 :
{ course: { track_codes: { x: 'a', y: 'b', z: 'c' } }
-
==============================
4.나는 또한이처럼 입력 도우미를 통과 할 경우 교육 과정의 배열을 자신의 속성과 각 하나를 얻을 것이다 것을 발견했습니다.
나는 또한이처럼 입력 도우미를 통과 할 경우 교육 과정의 배열을 자신의 속성과 각 하나를 얻을 것이다 것을 발견했습니다.
# Eg multiple input fields all with the same name: <input type="textbox" name="course[][track_codes]" ...> # will become the Array params["course"] # where you can get the values of all your attributes like this: params["course"].each do |course| course["track_codes"] end
-
==============================
5.난 그냥 JQuery와 taginput를 사용하여 솔루션을 설정 :
난 그냥 JQuery와 taginput를 사용하여 솔루션을 설정 :
http://xoxco.com/projects/code/tagsinput/
나는 사용자 정의 simple_form 확장을 썼다
# for use with: http://xoxco.com/projects/code/tagsinput/ class TagInput < SimpleForm::Inputs::Base def input @builder.text_field(attribute_name, input_html_options.merge(value: object.value.join(','))) end end
coffeescrpt 조각 :
$('input.tag').tagsInput()
그리고 슬프게도이 내 컨트롤러에 팅겨 약간 구체적으로 :
@user = User.find(params[:id]) attrs = params[:user] if @user.some_field.is_a? Array attrs[:some_field] = attrs[:some_field].split(',') end
-
==============================
6.간단한 양식을 사용하는 사람들을 위해, 당신은이 솔루션을 고려할 수 있습니다. 기본적으로 자신의 입력을 설정할 필요로 사용 : 배열입니다. 그런 다음 컨트롤러 레벨에서 입력을 처리해야합니다.
간단한 양식을 사용하는 사람들을 위해, 당신은이 솔루션을 고려할 수 있습니다. 기본적으로 자신의 입력을 설정할 필요로 사용 : 배열입니다. 그런 다음 컨트롤러 레벨에서 입력을 처리해야합니다.
#inside lib/utitilies class ArrayInput < SimpleForm::Inputs::Base def input @builder.text_field(attribute_name, input_html_options.merge!({value: object.premium_keyword.join(',')})) end end #inside view/_form ... = f.input :premium_keyword, as: :array, label: 'Premium Keyword (case insensitive, comma seperated)' #inside controller def update pkw = params[:restaurant][:premium_keyword] if pkw.present? pkw = pkw.split(", ") params[:restaurant][:premium_keyword] = pkw end if @restaurant.update_attributes(params[:restaurant]) redirect_to admin_city_restaurants_path, flash: { success: "You have successfully edited a restaurant"} else render :edit end end
귀하의 경우에는 단지 변경 : premium_keyword을 배열 필드
from https://stackoverflow.com/questions/3089849/ruby-on-rails-submitting-an-array-in-a-form by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 주문에 레일 4 has_many에 대한 사용되지 않는 경고 (0) | 2020.02.11 |
---|---|
[RUBY-ON-RAILS] 모델에서 헬퍼를 사용 : 어떻게 도우미 종속 관계를 포함합니까? (0) | 2020.02.11 |
[RUBY-ON-RAILS] 레일은 .find 대 어디에요 (0) | 2020.02.11 |
[RUBY-ON-RAILS] rails4 알 수없는 인코딩 이름을 - CP720 (0) | 2020.02.11 |
[RUBY-ON-RAILS] 레일에 어떤 루비는 루비 버전과 호환? (0) | 2020.02.11 |