茧宝石没有传递参数

时间:2015-07-23 20:06:44

标签: ruby-on-rails ruby-on-rails-4 cocoon-gem

所以尽管我以前成功使用过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

另外,如果重要的是我在生成时没有使用脚手架

1 个答案:

答案 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)