2009-11-25 1 views
6

경우에 따라 모델 생성없이 양식이 필요합니다 (예 : 검색 필드 또는 전자 메일). 일부 지침을 보내야하는 경우가 있습니다. 이 양식을 만드는 가장 좋은 방법은 무엇입니까? 가상 모델이나 이와 비슷한 것을 만들 수 있습니까? formtastic을 사용하고 싶습니다만 form_tag는 사용하지 마십시오.가상 모델 및 form_for (또는 formtastic)

답변

18

첫째, Formtastic은 모든 모델에서 모델을 필요로하지 않습니다. 물론 가장 잘 작동하고 모델을 사용하는 코드가 적습니다.

레일즈 자신의 form_for과 마찬가지로, 첫 번째 인수로 객체 대신 심볼을 전달할 수 있으며 Formtastic은 양식을 작성하고 심볼을 기반으로 매개 변수를 게시합니다. 예를 들면 :

<% semantic_form_for(:session) do |f| %> 
    ... 
<% end %> 

params[:session]로 컨트롤러에 양식 값을 사용할 수있게됩니다.

두 번째로 모델ActiveRecord 모델을 의미하지 않습니다. 제 말은 Formtastic이 의 돌연변이가 ActiveRecord 모델처럼 인 클래스의 모든 인스턴스에서 작동한다는 것입니다.

이 예는 많은 사람들이 Authlogic을 사용하여 Formtastic 인증을 사용하고 있습니다. Authlogic의 일부는 잘 작동하는 사용자 세션 모델의 생각이다 :

컨트롤러 :

def index 
    @user_session = UserSession.new 
end 

형태 :

<% semantic_form_for(@user_session) do |f| %> 
    <%= f.input :login %> 
    <%= f.input :password %> 
<% end %> 

params[:user_session] 같은 컨트롤러에서 양식 데이터를 사용할 수 있습니다.

정말로 모델 인스턴스를 작성하여 모델의 문제를 마무리하기가 어렵지 않습니다. Formtastic이 작동 할 때까지 계속 기대하는 방법을 계속 구현하십시오!

+1

나는 당신의 도전을 받아들입니다!여기에서는 ActiveRecord가 아닌 클래스를 찾아 "모델의 문제를 마무리합니다." http://dondoh.tumblr.com/post/4142258573/formtastic-without-activerecord – dondo

-1

또는 form_for를 사용하여 양식을 만들고 모델 참조를 비워두면됩니다. [: some_attribute] 컨트롤러에 간단히 말 PARAMS에 의해 <% form_for "", :url=>some_url do |f| %> <%= f.text_field "some_attribute" %> <%= submit_tag "submit" %>

당신은 값을 가져올 수 있습니다 예를 에 대한 .

+0

아래 투표에 대한 의견을 보내 주시면 감사하겠습니다. – Sid

+1

나는 OP가 시맨틱 솔루션을 찾고 이상적으로 Formtastic을 사용하고 있기 때문에 그것이라고 말하고 싶습니다. –

1

default_language.rb

 
class DefaultLanguage 
    attr_accessor :language_id 
end 

foo_controller.rb I의 값이 변경 될 때 형태를 게시 AJAX 사용

 
<% semantic_form_for @default_language do |form| %> 
    <% form.inputs :id => 'default_language' do %> 
     <%= form.input :id, 
     :as => :select, 
     :collection => @languages, 
     :required => false, 
     :label => "Primary Language:", 
     :include_blank => false %> 
    <% end %> 
    <% end %> 

 
    def index 
    @default_language = params[:default_language] || Language.find_by_name("English") 
    end 

index.erb.