存储创建不保存到数据库

时间:2012-05-15 21:26:41

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

我正在尝试创建一个表单,允许我的用户在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

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

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

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

人们可以提供的任何信息都会很棒。在此先感谢:)

2 个答案:

答案 0 :(得分:1)

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

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

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

在嵌套模型的表单上还有一个很好的Railscast:

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

答案 1 :(得分:0)

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

让我们先看一下你的观点,以及你做u = User.first; u.stores.create!

时控制台说的话

最后,imo,这只是一个用户有很多商店关联,不需要habtm。