0

これは初心者の質問であることはわかっていますが、何が欠けているのかわからないため、Google で通常の検索を行った後、投稿することにしました。アプリケーションのフッター (ニュースレター用) のフォームからコンテンツをデータベースに投稿しようとしているため、ビューはアプリケーション全体で繰り返されます。現在、フォームを送信すると、データベースに新しいオブジェクトが作成されますが、すべてのフィールドが「NULL」です。@newsletter変数をどこかに配置する必要があるようですが、どこにあるのかわかりません。

ビューで部分的にレンダリングしています

<%= form_tag({:controller => "newsletters", :action => "create"}, :method => "post", :id => "footer_email_form") do %>

    <%= text_field_tag :first_name, '', id: "footer_email_firstname" %>
    <%= text_field_tag :last_name, '', id: 'footer_email_lastname' %>
    <%= text_field_tag :email, '', id: 'footer_email_address' %>
    <%= submit_tag "Submit", :name => nil, id: 'footer_email_submit', class: "btn btn-primary" %>
<% end %>

コントローラー (アクションの作成)

class NewslettersController < ApplicationController

  def create
    @newsletter = Newsletter.new(params[:newsletter])

      if @newsletter.save
          format.html { redirect_to 'pages#home', notice: 'Thank You for signing up for our newsletter' }
          format.json { render json: @newsletter, status: :created, location: @newsletter }
        else
          format.json { render json: @newsletter.errors, status: :unprocessable_entity }
      end
  end
end

ルート

resources :newsletters, :only => [:create, :destroy]
4

1 に答える 1

1

次のようなものを使用します。

<%= form_for Newsletter.new do |f| %>
    <%= f.text_field :first_name %>
    <%= f.text_field :last_name %>
    <%= f.text_field :email %>
    <%= f.submit_tag "Submit", class: "btn btn-primary" %>
<% end %>

元のフォームが機能する方法パラメータは次のように送信されます。

params = {
  :first_name => 'A',
  :last_name  => 'B',
  :email      => 'C',
  # and so on...
}

これで何もしなければ@newsletter = Newsletter.new(params[:newsletter])何も起こりません。なぜなら、そうなので、すべての属性がparams[:newsletter](そしてDBに表示されるように)なるからです。nilnilNULL

開発ログには常に注意を払う必要があります。このようなエラーをデバッグするのに役立ちます。

于 2012-07-25T05:34:12.453 に答える