【问题标题】:Store create not saving to database存储创建不保存到数据库
【发布时间】:2012-05-15 21:26:40
【问题描述】:

我正在尝试创建一个表单,允许我的用户在 Rails 中创建与他们关联的商店。

我有一个 has_many 和 belongs_to 关联,但似乎无法让商店甚至保存到数据库以查看关联是否有效。

目前我的商店中的表单#new view 我有:

<%= form_for @store do |f| %>

<div class = "field">
    <%= f.label :name %>
    <%= f.text_field :name %>
</div>

<%= f.submit "Submit" %>

<% end %>

对于我的新操作和创建操作,我的商店控制器中有以下内容

def new
  @store = Store.new
end

def create
  @user = current_user 
  @store = @user.stores.new(params[:stores])

  if @store.save
    redirect_to store_path
  else
    render newstore_path
  end
end

我的型号名称也绝对是单数(商店)。

这在过去对我有用,所以我很困惑为什么现在不行。

如果有人可以向我展示使用嵌套资源成功关联两个模型的绝对最简单的方法,然后创建一个可以保持这种关联的表单,这将是非常有用的,因为我过去几天一直在努力解决这个问题并且真的认为一个可靠的例子会有所帮助。

不过,人们可以提供的任何信息都会非常好。在此先感谢:)

【问题讨论】:

    标签: ruby-on-rails model-view-controller ruby-on-rails-3.1 model-associations


    【解决方案1】:

    由于这是嵌套资源的表单,您可能需要

    <%= form_for [@user, @store] do |f| %>
    

    您可能还想尝试在控制器的创建操作中使用 create 或 build,而不是 new。

    还有一个很好的关于嵌套模型表单的 Railscast:

    http://railscasts.com/episodes/196-nested-model-form-revised

    【讨论】:

      【解决方案2】:

      这里不需要任何嵌套属性。你在 Store 控制器中,我也假设 store#new 视图。因此,您只是在创建一个 user_id 字段为 current_user.id 或 current_user.stores.build(params[:stores]) 的商店,应该在您的 create 方法中工作。

      我们也先看看你的观点,当你做u = User.first; u.stores.create!时控制台会说什么

      最后,imo,这只是一个User has many stores association,不需要habtm。

      【讨论】:

      • 嘿 Pjammer,感谢您的回答,不幸的是,我仍然无法将其实际保存到数据库中。它根本不会引发任何错误,只是不会保存到我的 stores 表中 - 你知道为什么会这样吗?
      • 当您使用 bang 方法 create! 时,它会保存到数据库或错误中。通常只有这两个选项。如果您可以粘贴创建User.first.stores.create! 的控制台,那不是我不相信您,而是...
      • 嘿 Pjammer,我刚刚给出了您对 User.first.stores.create! 的想法,它很高兴地在 stores 表中添加了一条包含 user_id 的商店行。然后,尽管current_user.stores.create!(params[:stores]) 在我看来,我尝试了同样的事情,但它不起作用 - 是不是 params 元素是错误的?再次感谢您的帮助:)
      • 所以,在您的日志中,您应该知道为什么它现在没有保存。它可能隐藏在最后一次调用服务器的混乱中,但它应该在那里。寻找它。在您的 create 方法中使用 pry gem 中的binding.pry,您可以看到正在传递的参数。
      猜你喜欢
      • 1970-01-01
      • 2017-06-16
      • 2020-02-15
      • 1970-01-01
      • 2018-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-07
      相关资源
      最近更新 更多