1

나는 세 가지 모델이 있습니다중첩 된 모델 형태는

class Rate < ActiveRecord::Base 
    attr_accessible :user_id, :car_id, :rate 

    belongs_to :user 
    belongs_to :car 
end 

class User < ActiveRecord::Base 
    attr_accessible :name 

    has_many :rates 
    accepts_nested_attributes_for :rates 
end 

class Car < ActiveRecord::Base 
    attr_accessible :name 

    has_many :rates 
    accepts_nested_attributes_for :rates 
end 

그리고 하나의 컨트롤러 :

class UsersController < ResourceController 
    def new 
    # Assume user is loaded 
    @user.rates.build 
    end 
end 

나는 목록을 연결합니다 중첩 된 형태를 구축하기 위해 노력하고있어 사용자/자동차 및 관련 요금.

뭔가 같은 :

USER_ID CAR_ID RATE 
1   1   10 
1   2   20 
1   3   30 
2   1   40 
3   2   50 

나는 제대로 구축하기 위해 fields_for 도우미를 구축하는 방법을 알아낼 수 없습니다 :

<% form_for @user do |f| %> 
    <%= @user.name %><br /> 
    <% Car.all.each do |car| %> 
    <%= car.name %><br /> 
    <%= f.fields_for :rates do |r| %> 
     <%= r.number_field :rate %> 
    <% end %> 
    <% end %> 
<% end %> 

문제는 다음과 같이 내가 데이터를 저장하는 속도 모델을하고 싶은 것입니다 user_idcar_id에 대한 올바른 매개 변수 같은

뭔가 :이 같은 fields_for 더 명시 적 인 노력했습니다

user[car=1][rate] 
user[car=2][rate] 

:

<%= r.fields_for 'user[car][rate]' %> 

하지만 여전히 제대로 중첩 된 매개 변수를 구축하지 않습니다. 자동차 매개 변수가 올바르게 식별되지 않았습니다.

도움이 될 것입니다. 감사.

편집 : 컨트롤러 작업은 사용자 권한이어야합니다. 위의 예는 간결하게하기 위해 단축되었지만 다른 사용자 관련 속성은 양식을 통해 사용할 수 있으므로 사용자 컨트롤러를 사용해야합니다.

답변 : 나는 그것을 할 방법을 알아 냈습니다. 나는 그것을 설명하는 added my own answer을 가졌습니다.

답변

0

나는 그것을 알아 냈다고 생각한다.

마지막으로
attr_accessible :rates_attributes 

fields_for 블록이 표시되어야합니다

Car.all.each { |c| @user.rates.build(car_id: c.id) } if @user.rates.count == 0 

그런 다음 내 모델에서, 나는 다음과 같은 필요한 다음과 같이 내 컨트롤러에서

, 나는 빌드 방법을 수정 한 (사용자 객체 객체 f에 있습니다).

<%= f.fields_for :rates do |r| %> 
    <%= r.hidden_field :car_id %> 
    <%= r.object.car.name %><br /> 
    <%= r.number_field :rate %> 
<% end %> 

이 부이 params가 제대로 해시되고 양식 제출시 요율 모델 항목이 만들어집니다.

컨트롤러에서 기존 사용자 요금을 확인하면 기존 값이 양식에 사용되며 새 값이 빌드되지 않음을 고려합니다 (빌드가 고려한 것 ...?).

0

양식이 새 사용자 대신 새 비율을 만들므로 메서드는 UsersController 대신 RatesController에 있어야합니다.

이 논리를 사용하면 문제가 해결 된 것으로 보입니다. 당신은 field_for rate[user]field_for rate[car]

+0

원래 질문에이 내용을 추가해야합니다. 양식은 요금뿐만 아니라 사용자를위한 다른 속성을 공유합니다. 나는 간결하게 그것을 단축했다. 그것은 사용자 컨트롤러 아래에 있어야합니다. 나는 원래의 질문을 업데이트 할 것이다. –

+0

세부 사항을 언급하지 않고서는 사용자 속성 업데이트와 속도 추가를 혼합하는 것이 논리적이지 않습니다. 한 가지 형식은 너무 많은 관심을 필요로합니다. 다른 작업은 다른 양식에서 더 낫습니다. 추가 비율은 비율을 추가하는 것입니다. 업데이트 프로필은 업데이트 프로필입니다. –

+0

가능합니다. 내가 어떻게 해결했는지에 대한 내 대답을 추가했습니다. –

1
<% form_for @user do |f| %> 
    <%= @user.name %><br /> 
    <%= f.fields_for :rates do |r| %> 
     <% Car.all.each do |car| %> 
     <%= car.name %><br /> 
     <%= r.number_field :rate %> 
    <% end %> 
    <% end %> 
<% end %> 

문제의이있을 수 있습니다 솔루션을 작성할 수 있습니다. 그냥 확인해.

+0

대답은 아니지만 결국 내 방향으로 향하게되었습니다. 유용성에 대해 투표 해 드리겠습니다. 감사. –