表单提交不会更新数据库

时间:2013-09-18 15:51:58

标签: ruby-on-rails ruby-on-rails-3

我正在尝试创建列表,每个都有2个属性名称和说明。数据库确实创建它并在使用控制台但不使用网站表单时保存它。当检查日志文件时,我发现网站表单没有发布而是使用获取并重定向到自身,如何使网站形成POST而不是GET,以便将其存储在数据库中。

日志文件:

在2013-09-18 12:35:14 -0400开始获取127.0.0.1的“/assets/jquery_ujs.js?body=1” 服务资产/jquery_ujs.js - 304未修改(0ms)

这是列表控制器:

 def create
    @list = Lists.new(params[:lists])
    if @list.save
      redirect_to @list
    else
      render 'new'
    end
  end

   def update
    if @list.update_attributes(params[:lists])

      flash[:success] = "lists updated"
      redirect_to @list
    else
      render 'edit'
    end
  end

def new
    @list = Lists.new
  end

这是用户创建列表的表单

<%= form_for @list, url: newlist_path(@list), html: { method: :put } do |f| %>

      <%= f.label :name %>
      <%= f.text_field :name %>
  </br>
      <%= f.label :description %>
      <%= f.text_field :description %>


      <%= f.submit "Create the List" %>
    <% end %>

2 个答案:

答案 0 :(得分:1)

您的form_for帮助程序正在路由到不正确的操作。请尝试路由到create操作:

<%= form_for @list, url: {action: "create"} do |f| %>

答案 1 :(得分:0)

我不知道您粘贴的控制器代码摘录是否完整,但您可能错过初始化列表对象以进行更新。在您的update操作中,您只有

if @list.update_attributes(params[:lists])

但您之前没有初始化@list变量。所以你可能需要像

这样的东西
@list = Lists.find(params[:id])

您还可以检查日志文件并验证将哪些参数发送到控制器。