0

私はまだRailsに比較的慣れておらず、ここで多くの同様の質問に目を通しましたが、これまでのところ私を助けてくれるものはありません. だから...簡単なメールを送信したいフォームがあります。Bootstrapモーダルでポップアップし、次のようになります。

.form-horizontal
  = form_tag :url => { :action => :share_event }, remote: true, html: {"data-type" => :json} do
    .control-group
      = label_tag :to
      = text_field_tag :to
    .control-group
      = label_tag :from
      = text_field_tag :from
    .control-group
      = label_tag :subject
      = text_field_tag :subject  
    - hidden_field_tag :event_url, :value => url
    .actions
      = submit_tag 'share event', :class => "btn btn-mini submit"

そして私のコントローラーで:

def share_event
  @to = params[:to]
  @from = params[:from]
  @subject = params[:subject]
  @url = params[:url]
  respond_to do |format|
    EventMailer.share_event(@to, @from, @subject, @url).deliver
    redirect_to events_path, notice: 'Event sent'
  end 
end

  EventMailer.share_event(@to, @from, @subject, @url).deliver
end

ルート:

resources :events do
  post :share_event, :on => :collection
end

問題は、送信時に「share_event」ではなく「create」アクションを使用することです。私は多くのアプローチを試しましたが、「作成」を使い続けています。ログからの抜粋は次のとおりです。

Started POST "/events?html%5Bdata-type%5D=json&remote=true&url=share_events_path" for 41.134.48.225 at 2012-11-06 15:34:25 +0100
Processing by EventsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"7/6pg9XX/N09qUB+SUlWOdpCsgPOAiXM+nC+mq6VtKE=", "to"=>"to@example.com", "from"=>"from@example.com", "subject"=>"gfh", "event_url"=>"{:value=>\"http://events.example.com/events/3\"}", "commit"=>"share event »", "html"=>{"data-type"=>"json"}, "remote"=>"true", "url"=>"share_events_path"}

ヘルプ/アドバイスをいただければ幸いです。

どうもありがとう!

4

1 に答える 1

1

何が問題だったのかはわかりませんが、それはあなたのform_tag宣言にあると思います。この次の変更を試すことができます

あなたのroute.rb

resources :events do
  collection { post :share_event }
end

あなたの見解では

交換:

= form_tag :url => { :action => :share_event }, remote: true, html: {"data-type" => :json} do

と:

= form_tag(share_event_events_path({format: 'json'}), remote: true) do

form_tag API ドキュメントを確認してください。

それが機能する場合、推奨される命名は次のとおりです。

ルート.rb

resources :events do
  collection { post :share }
end

したがって、次のように呼び出すことができshare_events_pathます

= form_tag(share_events_path({format: 'json'}), remote: true) do
于 2012-11-06T15:21:29.963 に答える