Поэтому, хотя я успешно использовал кокон раньше, я все еще относительно новичок и по какой-то причине не могу заставить его пройти через параметры (я пробовал с двумя разными приложениями и на Fedora 22 и Mac 10.10.4) .
Для контекста я использовал стандартные формы rails в .erb и имею как :post, так и :post_items, которые в настоящее время имеют только описание. Я использую кокон 1.2.6.
Итак, в application.js у меня есть
//= require cocoon
в пост.рб
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, и я не могу понять, почему.
Спасибо за помощь!
EDIT: ради информации я добавил свои миграции.
в БД/мигрировать/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
Также, если это имеет значение, я не использовал леса при их создании.
@post.post_images.build
, который требуется. - person Pavan   schedule 24.07.2015