所以尽管我以前成功使用过cocoon,但我仍然相对较新,无论出于什么原因似乎无法通过参数(我尝试过两个不同的应用程序,在fedora 22和mac 10.10上) 0.4)。
对于上下文,我一直在.erb中使用标准的rails表单,并且同时包含:post和:post_items,它们目前只有描述。我正在使用cocoon 1.2.6。
所以在application.js中我有
//= require cocoon
post.rb中的
class Post < ActiveRecord::Base
has_many :post_items
accepts_nested_attributes_for :post_items, :reject_if => :all_blank, :allow_destroy => true
validates :title, :post_items, presence: true
validates :title, length: {maximum: 255}
end
post_item.rb中的
class PostItem < ActiveRecord::Base
belongs_to :post
end
我的相关控制器是(posts_controller.rb):
def index
@post = Post.new
end
def create
params[:post][:ip_address] = request.remote_ip
@post = Post.create(post_params)
if @post.save
flash[:success] = "Your post was successfully created"
redirect_to @post
else
flash[:failure] = "There was an error saving your post"
render 'index'
end
end
private
def find_post
@post = Post.find(params[:id])
end
def post_params
params.require(:post).permit(:title, :tags, :hits, :ip_address, post_items_attributes: [:id, :description, :_destroy])
end
最后,在我的观点中,我有(_form.html.erb)
<%= form_for @post, html: {multipart: true} do |f| %>
<% if @post.errors.any? %>
<p>There were <%= @post.errors.count %> errors</p>
<% @post.errors.full_messages.each do |msg| %>
<p><%= msg %></p>
<% end %>
<% end %>
<!-- a bunch of fields here -->
<div class="six columns">
<h3>Add images</h3>
<div id="post_items">
<% f.fields_for :post_items do |post_item| %>
<%= render 'post_item_fields', f: post_item %>
<% end %>
<div class="links">
<%= link_to_add_association 'Add Image', f, :post_items, class: "add-button" %>
</div>
</div>
<%= f.button :submit, class: "button submit-button" %>
<% end %>
最后_post_item_fields.html.erb
<div class="nested-fields">
<div class="field">
<%= f.label :description %>
<%= f.text_area :description %>
</div>
<%= link_to_remove_association "Remove", f %>
</div>
有一些CSS文件可以修改html,但除了自动生成的内容之外,我没有js。几天来我一直坚持这个问题,我无法弄清楚出了什么问题。我已经尝试了没有验证码的post.rb,但它仍然不起作用。
我唯一的领导是,当你打印出参数时,它已经删除了post_items参数,并且在我的生命中我无法弄清楚原因。
感谢您的帮助!
编辑:为了获取信息,我添加了迁移。
db / migrate / 20150722191917_create_post_items.rb中的
class CreatePostItems < ActiveRecord::Migration
def change
create_table :post_items do |t|
t.string :description
t.belongs_to :post, index: true, foreign_key: true
end
end
end
并在db / migrate / 20150722173629_create_posts.rb
中class CreatePosts < ActiveRecord::Migration
def change
create_table :posts do |t|
t.string :title
t.string :tags
t.integer :hits, null: false, default: 0
t.string :ip_address
t.timestamps null: false
end
add_index :posts, :ip_address
end
end
另外,如果重要的是我在生成时没有使用脚手架
答案 0 :(得分:0)
嗯,我觉得我终于弄清楚了什么是错的(尽管我真的不明白我们应该做些什么才能解决它)是一旦我摆脱了div class = &#34;六列&#34;它起作用,显然是干扰了茧宝石解析HTML的能力。
感谢大家的帮助!
编辑:澄清我必须将_form.html.erb更改为:
<%= form_for @post, html: {multipart: true} do |f| %>
<% if @post.errors.any? %>
<p>There were <%= @post.errors.count %> errors</p>
<% @post.errors.full_messages.each do |msg| %>
<p><%= msg %></p>
<% end %>
<% end %>
<!-- a bunch of fields here -->
<h3>Add images</h3>
<div id="post_items">
<% f.fields_for :post_items do |post_item| %>
<%= render 'post_item_fields', f: post_item %>
<% end %>
<div class="links">
<%= link_to_add_association 'Add Image', f, :post_items, class: "add-button" %>
</div>
</div>
<%= f.button :submit, class: "button submit-button" %>
<% end %>
所以我觉得这有点我的错,因为如果我使用了完整的html而不是解析它与cocoon相关的位,那么错误会更容易被发现但是它无论如何。 (基本上这个故事的寓意是你不能在表格内部使用div)