1

나는 즉시 레코드를 변경하는 방법을 알아내는 데 어려움을 겪고 있습니다.fields_for 레코드 이름 변경

나는 사람으로부터 변경 입력 필드에 원하는 [이름 명 [] [이름]

<%= f.fields_for :people, nil, prefix: "people[]" do |fy| %> 
<% 4.times.each do %> 
     <div class="grid-1"> 
      <%= fy.text_field :name %> 
     </div> 
    <% end %> 

<% 4.times.each do %> 
     <div class="grid-1"> 
      <%= fy.text_field :city %> 
     </div> 
    <% end %> 
<% end %> 

액티브 레코드 마이클 번째 방법을 사용하여 출력 : I '는

year => [{":name"=>""}, {":name"=>""}, {":name"=>""}, {":name"=>"", ":city"=>""}, {":city"=>""}, {":city"=>""}, {":city"=>"", ":town"=>""}... etc] 
+0

여기에 model Person을 사용하고 싶지 않은 이유는 무엇입니까? – BroiSatse

+0

여기에서 너 정말로하고 싶은게 뭐야? 네가 같은 필드': name'을 네 번 물어보고 싶은지 이해하려고합니다. 그런데 나열된 코드에 구문 오류 (쉼표가 붙어 있음)가 있으므로이 코드가 사용자가 시도한 코드인지 여부가 명확하지 않습니다. – lurker

+0

그래서 나는이 형태로 그들을 모으고 싶다. {people : [ggg "}, {name :"ggg "}]} –

답변

0

ActiveRecord가있는 레일즈를 사용하고있는 상황에서 이것을 처리하는 방법을 보여주기 때문에 원래의 대답을 남겨 두었습니다. 원래의 심문관은 아래에 자신의 질문을 명확히 했으므로 자신의 명확한 질문에 대한 답을보기 위해 아래로 스크롤하십시오.

레코드에 사람을 추가해야합니다. 이제이 있다고 가정 해 봅시다 :

컨트롤러에서
class Family < ActiveRecord::Base 
    has_many :people, inverse_of: :family 
    accepts_nested_attributes_for :people 
end 

class Person < ActiveRecord::Base 
    belongs_to :family, inverse_of: :people 
end 

, 그냥 어떤 사람을 추가

def new 
    @family = Family.new 
    4.times { @family.people.build } 
end 

그런 다음 당신이 그들을해야합니다.

<%= f.fields_for :people do |person_form| -%> 
    <%= person_form.text_field :name %> 
<% end -%> 

레일이 나머지를 처리합니다 :

당신은 다음 양식을 단순화 할 필요가 잊어 버렸습니다.

설명했습니다 대답은 :

문제는 현재 액티브의 부재에서이 작업을 수행하는 방법이된다. 이 경우 양식 작성 도구 (fields_for 및 friends)를 사용하지 마십시오. 손으로 직접 만들어 봅시다.

일반적으로 이와 같은 양식을 만들 때 Ruby의 구조와 양식 자체 사이를 이동할 수 있기를 원합니다.

{ people: [{name:"ggg"}, {name:"ggg"}] } 

우리는이 같은 양식을 구축하려는 : 귀하의 경우

는이 같은 해시와 끝까지 할

<% records = params[:records] || { people: [ { name: 'name1' }, { name: 'name2' } ] } -%> 
    <%= form_tag nil, method: :get do -%> 
     <% records[:people].each do |person| -%> 
     <%= text_field_tag "records[people][][name]", person[:name] %> 
     <% end -%> 
     <%= submit_tag "submit" -%> 
    <% end -%> 

당신은 당신이 얻을를 제출하면 귀하 매개 변수 :

Parameters: {"utf8"=>"✓", "records"=>{"people"=>[{"name"=>"name1"}, {"name"=>"name2"}]}, "commit"=>"submit"} 

예를 들어 '사람'에 '이름'과 '도시'가 포함되도록 확장한다고 가정 해 보겠습니다. 그것은 여전히 ​​작동합니다 :

<% records = params[:records] || { people: [ { name: 'name1', city: 'Nashville' }, { name: 'name2', city: 'Brentwood' } ] } -%> 
    <%= form_tag nil, method: :get do -%> 
     <% records[:people].each do |person| -%> 
     <%= text_field_tag "records[people][][name]", person[:name] %> 
     <%= text_field_tag "records[people][][city]", person[:city] %> 
     <br /> 
     <% end -%> 
     <%= submit_tag "submit" -%> 
    <% end -%> 

매개 변수에서 :

"records"=>{"people"=>[{"name"=>"name1", "city"=>"Nashville"}, {"name"=>"name2", "city"=>"Brentwood"}]} 

서로 다른 몇 가지 방법이있다 특정 수의 항목을 가지고 강제로합니다. 이 경우 항목 수를 적용하거나 공백을 특별히 무시해야합니다.

<% records = params[:records] || { people: [ { name: 'name1', city: 'Nashville' }, { name: 'name2', city: 'Brentwood' } ] } -%> 
    <%= form_tag nil, method: :get do -%> 
     <% 0.upto(3) do |x| -%> 
     <%= text_field_tag "records[people][][name]", (records[:people][x][:name] rescue '') %> 
     <%= text_field_tag "records[people][][city]", (records[:people][x][:city] rescue '') %> 
     <br /> 
     <% end -%> 
     <%= submit_tag "submit" -%> 
    <% end -%> 

이 수율 :이 같은 작은 변화를 만드는 작업을 수행해야합니다 항상 이름/도시의 4 개 세트를 보여줍니다 여기

"records"=>{"people"=>[{"name"=>"name1", "city"=>"Nashville"}, {"name"=>"name2", "city"=>"Brentwood"}, {"name"=>"", "city"=>""}, {"name"=>"", "city"=>""}]} 

한 가지주의해야 할 점은 그냥 모두를 고집하고있어 것입니다 이것은 단순성을 위해보기에는하지만 "@ 레코드"를 사용하여 컨트롤러에있는 첫 번째 줄 ("레코드"가 설정된 위치)을 거의 확실하게 원할 것입니다.

행운을 빈다.

+0

당신의 구현이 마음에 들지만 .. 여기에 ActiveRecord를 사용하지 않습니다. 레거시 객체로 .. 활성 레코드없이이를 수행 할 수있는 방법을 제안 할 수 있습니까? 건배 –

+0

위의 확장 된 대답을 참조하십시오. –

+0

감사합니다 Michael .. 나는 우리가 아주 가깝다고 생각합니다.이 경우 이름과 도시는 가로로 4 번 렌더링됩니다. 위의 질문을 업데이트했습니다. 출력은 다음과 같습니다. year => [{ ": name "", ": city"=> ""}, { ":"} ", {": name " ": city"=> ""}, { ": city"=> ""}, { ": city" –