2012-09-08 2 views
0

나는 rails.I의 새내기입니다 : Form과 FormType.A form_type은 0 또는 하나의 form을 가질 수 있습니다. 하나의 form은 하나의 form_type에 속합니다. 아래와 같이 모델 :simple_form_for @form에서 f.association의 유효성 확인

class FormType < ActiveRecord::Base 

    has_one :form 
    attr_accessible :name 

end 


class Form < ActiveRecord::Base 
    belongs_to :form_type 

    validates :name, :presence => true 
    validates_presence_of :form_type 

    attr_accessible :name, :enabled 

end 

내 _form.html.erb이

<%= simple_form_for(@form, :html => { :class => 'form-horizontal' }, 
:url => @form.new_record?() ? admin_forms_path : admin_form_path, 
:method => @form.new_record?() ? 'post':'put') do |f| %> 
<div class="form-inputs"> 
     <%= f.input :name, :required => true, :autofocus => true %> 
     <%= f.association :form_type,:required => true, :hint => "select type" %> 
    <%= f.input :enabled %> 
</div> 

<div class="form-actions"> 
     <%= f.button :submit, :class => 'btn-primary' %> 
     <% if ! @form.new_record?() %> 
     <%= link_to t('.destroy', :default => t("helpers.links.destroy")), 
      admin_form_path(@form), 
      :method => 'delete', 
      :confirm => t('.confirm', :default => t("helpers.links.confirm")), 
      :class => 'btn btn-danger' %> 
     <% end %> 
</div> 
<% end %> 

이 내 컨트롤러 코드는 다음과 같습니다.

def create 
@form = Form.new 
@form.name = params[:form][:name] 
@form.enabled = params[:form][:enabled] 
@form.form_type_id = params[:form][:form_type_id].to_i 
if @form.save 
    redirect_to :action => 'index' 
else 
    render action: "new" 
end 

나는이 문제를 해결하기 위해 내 실수 또는 유용한 기사를 가리 킵니다 사람 association.Can의 유효성을 검사 할 수 서버 측 valdiation 이름 필드에 발사 볼 수 있지만입니다.

+0

컨트롤러 코드를 게시해야하는 이유는 : url 및 : method를 simple_form_for 메서드에 전달하는 이유와 같은 질문이 너무 많기 때문입니까? 이 작업을 수행 할 필요가 없으며 @business_form 또는 @form이라는 객체 인스턴스도 있어야합니다. 당신은 모두 html로 – ADAM

+0

@ 아담 나는 컨트롤러 코드 now.my 개체를 가지고있다 business_form – Ramoji

답변

0

이는 주로 create 메소드에서 속성을 지정하는 방법으로 인해 발생합니다. 당신이하는 방식은 실제로 표준이 아닙니다.

특히이 행은 .to_i를 호출하여 값을 전송하기 때문에 값을 전달하지 않으면 0이됩니다. 그래서 상관없이 validated_presence_of 무엇 : form_type이되고 쓸모 :

@form.form_type_id = params[:form][:form_type_id].to_i 

즉/nil.to_i이 유효성 검사를 통과 할 0 동일하지

는 대신 생성 방법이 시도 :

def create 
    @form = Form.new(params[:form]) #mass assignment 
    if @form.save 
     redirect_to :action => 'index' 
    else 
     render action: "new" 
    end 
end 

에서 귀하의 양식 모델은 대량 할당을 허용하려는 값을 허용 목록에 입력했는지 확인하십시오. 이 경우 - attr_accessible :name, :enabled, :form_type_id

또한 레일의 기능을 복제 할 때 html 파일의 simple_form_for 메소드에서 다음을 가져옵니다. 요청을 변경하고 포스트/put에 대한 경로를 올바른지 여부를 이미 알고 있습니다. 또는 @form이 새 레코드인지 여부. 당신은 (관리자 폴더)를 관리 네임 스페이스를 가지고있는 것처럼

:url => @form.new_record?() ? admin_forms_path : admin_form_path, 
:method => @form.new_record?() ? 'post':'put' 

은 같은데 - 그 대신이 경우 사용 인 경우도

<%= simple_form_for([:admin, @form]) do |f| %> 

, 나는 앱에 대해 많이 알고 있지만, has_one을 의심하지 말아 : 양식 모델의 양식은 has_many : forms 여야합니다?

희망 하시겠습니까?

+0

감사합니다 @ 답장을 귀하의 상세한 answer.But에 대한 attre_accessible에 form_type_id를 추가 할 때 그것을 해결할 수 없습니다 list.Also 또한 선택 필드 대신 이름 필드에 대한 유효성 검사 msg을 받고 있는데, submit과 type selectbox가 비어있는 채로 양식에 채워져 있어도 양식 모델에 – Ramoji

+0

이 붙어있어'attr_accessible : form_type_id'를 입력하고'<% = f.text_field : name %> 대신 f.input : html 형식으로 입력하십시오. – ADAM