4

私は現在、/ contactで利用可能な、コントローラー、モデル、およびメーラー(Mandrill)を使用する作業レール連絡フォーム(別のSO回答から取得)を持っています。これは、コントローラーで新しいルートと作成ルートに応答し、引き続きアクティブモデル機能を使用します。フォームはajaxを使用しません。

モーダルポップアップを介した/contactページではなく、ホームページで連絡先フォームを機能させる必要があります。

私はモーダルについて多くのSOクエリを読みましたが、すべてがモーダルに特定のことを実行させることに関連しているようです。通常のフォームを模倣するモーダルフォームを作成することについてはそれほど重要ではありません。

まず、ホームページにモーダルを追加しました。

次に、フォームをホームページモデルに追加しようとすると、フォームがhome_controllerの一部であるため、メソッドエラーが発生します。新しいコントローラーアクションとcreateコントローラーアクションをホームコントローラーにコピーした後、フォームが非表示になっているだけで、ページが読み込まれたときに(インデックスアクションによって)実行されていることに気付きました。インデックスアクションに追加@message = Message.newすることは役に立たないようです-そして私はこれをモーダルロードで望んでいませんか?

連絡先ページの作業フォームの主な可動部分と、ホームページの作業モーダルボックスを次に示します。2つをマージして、現在の機能を維持するにはどうすればよいですか。

これがコンタクトコントローラです:

#/app/controllers/contact_controller.rb
class ContactController < ApplicationController

 def new
  @message = Message.new
 end

 def create
  @message = Message.new(params[:message])

  if @message.valid?
     NotificationsMailer.new_message(@message).deliver
     redirect_to(root_path, :notice => "Message was successfully sent.")
  else
   flash.now.alert = "Please fill all fields."
   render :new
  end

 end
end

メッセージモデル

#app/models/message.rb
class Message

  include ActiveModel::Validations
  include ActiveModel::Conversion
  extend ActiveModel::Naming

  attr_accessor :name, :email, :subject, :body

  validates :name, :email, :subject, :body, :presence => true
  validates :email, :format => { :with => %r{.+@.+\..+} }, :allow_blank => true

  def initialize(attributes = {})
    attributes.each do |name, value|
      send("#{name}=", value)
    end
  end

  def persisted?
    false
  end

end

そしてビュー:

 <%= form_for @message, :url => contact_path do |form| %>
  <fieldset class="fields">
    <div class="field">
      <%= form.label :name %>
      <%= form.text_field :name %>
    </div>

    <div class="field">
      <%= form.label :email %>
      <%= form.text_field :email %>
    </div>
    <div class="field">
      <%= form.label :subject %>
      <%= form.text_field :subject %>
    </div>

    <div class="field">
      <%= form.label :body %>
      <%= form.text_area :body %>
    </div>
  </fieldset>

  <fieldset class="actions">
   <%= form.submit "Send" %>
  </fieldset>
<% end %>

最後に、私のホームページ内に、モーダル用にこれがあります(フォームは含まれていません)

<div class="modal fade" id="modal_contact_form">

  <div class="modal-header">
    <a class="close" data-dismiss="modal">&times;</a>
      <h3>Contact Form</h3>
  </div>
  <div class="modal-body">
    <p>Test Content for Modal</p>
  </div>
  <div class="modal-footer">
 </div>
</div>

これによって呼び出されます<li><a href="#modal_contact_form" data-toggle="modal">contact</a></li>

この時点まで、これを機能させるための私の試みは多岐にわたりました-頭を動かす必要がある主な問題(私は思う)は、フォームがhome_controllerのインデックスアクションによってロードされることです-理想的には、私はまだ欲しいと思いますcontact_controllerのロジックを使用するには?

アドバイスや提案をいただければ幸いです。この時点で、フォームをモーダルに移動するだけの簡単な方法があるかどうか疑問に思っています。

乾杯、

ミズパ

注:私がajaxについて持っている質問に答えて、私はajaxを避けました。これは、レール3.2で試してみるのが困難であり、進歩が見られないためです。形 ?

4

1 に答える 1

0

やっぱり遠くないようです!

#rubyonrailsチャネルからのポインターの後、答えは次のとおりです。

1)フォームをそのままモーダルにコピーします。(おそらく異なるスタイルが必要であることに注意してください-しかし、この答えは必要な機能を提供します)。

2)@message = Message.newhome_controller.rbのインデックスアクションに追加するには

私はこれに非常に似たものを試しましたが、別のエラーを導入する必要があり、したがって正しい解決策をバイパスしました。

于 2013-03-19T00:51:25.757 に答える