0

我知道这是一个新手问题,只是不确定我错过了什么,并决定在我通常通过谷歌搜索后发布。我正在尝试从应用程序页脚中的表单(对于时事通讯)将内容发布到数据库,因此在整个应用程序中重复视图。现在,当我提交表单时,会在数据库中创建一个新对象,但所有字段都是“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]nil,因此您的所有属性都将是nil(并显示NULL在数据库中)。

您应该始终关注开发日志。它将帮助您调试此类错误。

于 2012-07-25T05:34:12.453 回答