【发布时间】:2016-03-01 03:47:40
【问题描述】:
我正在关注this tutorial,作者正在使用 Slim。由于我更熟悉标准 Rails 表单,因此我尝试将 slim 标记更改为普通表单,如下所示:
new.html.erb
<%= render 'form' %>
_form.html.erb
<%= form_for(@user) do |f| %>
<%= f.text_field :name %>
<br><br>
<%= fields_for :user_photos do |photo| %>
<%= render "user_photo_fields", f: photo %>
<span class="links">
<%= link_to_add_association "add photo", f, :user_photos %>
</span>
<% end %>
<%= f.submit %>
<% end %>
_user_photo_fields.html.erb
<div class="nested-fields">
<div class="field">
<%= f.file_field :photo %>
</div>
<%= link_to_remove_association "remove", f %>
</div>
还有,这是我的模型:
class User < ActiveRecord::Base
has_many :user_photos
validates_presence_of :name
accepts_nested_attributes_for :user_photos, allow_destroy: true
end
class UserPhoto < ActiveRecord::Base
belongs_to :user
mount_uploader :photo, PhotoUploader
end
最后,users_controller.rb 中的强大参数。因为我使用的是rails g scaffold user name:string生成器,所以我没有触及控制器内部的其余方法。
def user_params
params.require(:user).permit(:name, user_photos_attributes: [:id, :photo, :_destroy])
end
我收到此错误:
undefined method `new_record?' for nil:NilClass
我在这里错过了什么?
【问题讨论】:
标签: forms ruby-on-rails-4 nested-forms nested-attributes cocoon-gem