2011-02-05 3 views
1

많은 중재자를 온라인으로 확인하면서 간단한 중첩 된 양식을 만들려고 노력하고 있습니다. 그러나 누락 된 부분을 찾을 수 없습니다! 나는 다음과 같습니다단순한 중첩 된 양식이지만 작동하지 않는 것 같습니다.

이제
class Configuration < ActiveRecord::Base 
    has_many :configoptions 
    accepts_nested_attributes_for :configoptions 
end 

class Configoption < ActiveRecord::Base 
    belongs_to :configuration 
    has_many :items 
end 

, 당신이 구성을 선택하면 그것에 속하는 configoptions를 표시 할 수 있도록 간단한 양식을 만들려고 노력하고있어,하지만 아무것도 작동!

는 컨트롤러에서 모든 HTML

<%= form_for :config do |f| %> 
    <%= f.text_field(:name)%> 
    <% f.fields_for @options do |option|%> 
    <% end %> 
    <% end %> 

없이이다 내가 가진 :

def show 
    @config = Configuration.find(params[:id]) 
    @options = @config.configoptions 
    end 

하지만 난 오류 그만 둘 :

undefined method `model_name' for Array:Class 

사람이 조언을 하는가를 나를 위해서? 고마워요!

답변

3

FYI, Ryan Bates (RailsCasts)는이 부분을 처리 할 수있는 보석을 만들었습니다. 나는 그것을 지금 사용하고 있으며 그것은 잘 작동한다!

자세한 내용은 https://github.com/reu/simple_nested_form을 참조하십시오.

2

컬렉션 (배열 등)을 사용하는 경우 model_name을 지정해야합니다. fields_for에서

<%= form_for :config do |f| %> 
    <%= f.text_field(:name)%> 
    <%= f.fields_for :configoptions, @options do |option|%> 
     <%= option.text_field(:some_attribute) %> 
    <% end %> 
    <% end %> 

내가 사용하는 컬렉션으로 두 개의 인수, 모델 이름으로 :configoptions@options을 전달하고있다. http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html에는 위의 절반 정도 아래로 스크롤하면 훌륭한 중첩 된 속성 예제 톤이 있습니다.

또는 (개인적으로 선호하는 방법) 컬렉션을 반복하고 각 개체에 fields_for을 호출하는 것이 좋습니다.

<%= form_for :config do |f| %> 
    <%= f.text_field(:name)%> 
    <% @options.each do |configoption| %> 
     <%= f.fields_for configoption do |option|%> 
     <%= option.text_field(:some_attribute) %> 
     <% end %> 
    <% end %> 
    <% end %> 
+0

감사 아담. 내가 제안한 두 번째 방법을 시도 할 때 모든 다른 옵션이 나열되기 때문에 실제로 필요한 것을 얻습니다. 그러나 첫 번째 경우에는 어떤 이유로 인해 그렇지 않습니다. 내 옵션에서 일부는 사용자가 선택할 수있는 드롭 다운입니다. 양식에서 선택한 옵션을 사용하여 새 구성을 작성하려면 제출 단추를 누른 다음 메소드를 제안 할 수있는 방법이 있습니까? 어떻게 생각해? 고마워요! – Lievcin

+0

안녕하세요, 'accepts_nested_attributes'는 선택한 옵션으로 구성을 만드는 일을 처리해야합니다. 컨트롤러에서'@conf = Configuration.build (params [: config]); @ conf.save'를 사용하여 구성 및 중첩 구성 옵션 객체를 작성합니다. 이것이 당신이 찾고있는 것이라면 알려주십시오. – Adam

0

당신은 사용 :

<% f.fields_for @options do |option|%> 

시도

<%= f.fields_for @options do |option|%> 

를 사용하여 저도 같은 문제를 가지고, 그것은이 사소한 아이디어에 의해 해결되었다.

+3

출력이 부족하여 레일에 "Array : Class"에 대한 "정의되지 않은 메소드'model_name '이 나오지 않습니다. –

1

시도 :

class Configuration < ActiveRecord::Base 
    has_many :configoptions, :dependent => :destroy 
    accepts_nested_attributes_for :configoptions, :allow_destroy => true 
end 
관련 문제