モデルを作成せずにフォームが必要になる場合があります。たとえば、検索フィールドや電子メールなど、いくつかの指示を送信する必要があります。このフォームを作成するための最良の方法は何ですか?仮想モデルなどを作成できますか?formtasticを使用したいのですが、form_tagは使用しません。
3 に答える
まず、Formtasticはすべての場合にモデルを必要としませんが、確かに最適に機能し、モデルで必要なコードは少なくなります。
Rails独自の組み込みのようにform_for
、最初の引数としてオブジェクトの代わりにシンボルを渡すことができ、Formtasticはフォームを構築し、シンボルに基づいてパラメーターを投稿します。例えば:
<% semantic_form_for(:session) do |f| %>
...
<% end %>
これにより、フォームの値がコントローラーで使用できるようになりますparams[:session]
。
第二に、モデルはActiveRecordモデルを意味するものではありません。つまり、Formtasticは、ActiveRecordモデルのように機能するクラスの任意のインスタンスで機能します。
多くの人がFormtasticでの認証にAuthlogicを使用しているというこの典型的な例。Authlogicの一部は、正常に機能するUserSessionモデルのアイデアです。
コントローラ:
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が機能するまで、Formtasticが期待しているメソッドを実装し続けてください。
default_language.rb
クラスDefaultLanguage attr_accessor:language_id 終わり
foo_controller.rb
defインデックス @default_language = params [:default_language] || Language.find_by_name( "英語") 終わり
index.erb
<%semantic_form_for @default_language do | form | %> <%form.inputs:id =>'default_language' do%> <%= form.input:id、 :as =>:select、 :collection => @languages、 :required => false、 :label => "第一言語:"、 :include_blank => false%> <%終了%> <%終了%>
値が変更されたときにフォームを投稿するためにAJAXを使用しました。
または、form_forを使用してフォームを作成し、モデル参照を空白のままにします。例えば
<% form_for "", :url=>some_url do |f| %>
<%= f.text_field "some_attribute" %>
<%= submit_tag "submit" %>
コントローラでparams[:some_attribute]と言うだけで、値を取得できます。