2

入力した「メール」を静的ページからデータベースに保存したい。現在、アドレスフィールドを持つメールモデルがありますが、送信入力をクリックしても値を保存できません。

フォーム付きレイアウト

# layout/website.html.erb
<div>
  <%= form_for @email, :url => newsletter_path, :method => :post do |email| %>
    <%= email.text_field :address %>
    <%= email.submit "Go" %>
  <% end %>
</div>

ページコントローラー

# controllers/pages_controller.rb
def home
  newsletter
end

def newsletter
  @email = Email.new(params[:address])

  if @email.valid?
    redirect_to(request.referer, :notice => "The suscription has been sent successfully.")
  else
    redirect_to(request.referer, :alert => "Please add an valid email address.")
  end
end

ルート

# routes.rb from static pages
  get "/home" => 'pages#home', :as => :home
  get "/pricing" => 'pages#pricing', :as => :pricing
  get "/logo-gallery" => 'pages#logo_gallery', :as => :logo_gallery
  get "/blog" => 'pages#blog', :as => :blog
  get "/blog/:id" => 'pages#post', :as => :post
  get "/contact" => 'pages#contact', :as => :contact
  match '/contact' => 'pages#create', :as => :contact, :via => :post
  get "/faqs-and-terms" => 'pages#faqs_and_terms', :as => :faqs_and_terms

  match "/newsletter" => 'pages#newsletter', :as => :newsletter, :via => :post

モデル

# models/email.rb 
class Email < ActiveRecord::Base
  attr_accessible :address
  validates :address, :format => { :with => %r{.+@.+\..+} }, :allow_blank => true
end

このコードを使用すると、/home にアクセスすると、次のように表示されます。

ActionController::ActionControllerError in PagesController#home
Cannot redirect to nil!

これを修正してより良いコードを得るために何ができるでしょうか。ありがとうございました。

4

2 に答える 2

3

DB にレコードを保持するEmail.create(params[:email])代わりに使用する必要があります。Email.new(params[:address])また、ビューでコードを追加してhidden_​​fieldを追加します

<%= email.text_field :address %>
<%= hidden_field_tag :referer, :value => request.path %>
<%= email.submit "Go" %>

そして、コントローラーで:

redirect_to params[:referer]

UPDparams[:email]また、ではなくコントローラーで 使用する必要があることに注意してくださいparams[:address]。コントローラーで呼び出しraise params.inspectて、フォームから送信されたパラメーターを検査できます。

于 2013-09-05T07:03:17.657 に答える