Мне нужны некоторые указатели на то, как Rails 4 работает с ассоциацией has_one и belongs_to.
Моя форма не сохраняет отношения has_one
Модель публикации
class Post < ActiveRecord::Base
validates: :body, presence: true
has_one :category, dependent: :destroy
accepts_nested_attributes_for :category
end
class Category < ActiveRecord::Base
validates :title, presence: true
belongs_to :post
end
Почтовый контроллер
class PostController < ApplicationController
def new
@post = Post.new
@post.build_category
end
def create
@post = Post.new(post_params)
end
private
def post_params
params.require(:post).permit(:body)
end
end
Форма в посту # новое действие
<%= form_for @post do |form| %>
<%= form.label :body %>
<%= form.text_area :body %>
<%= fields_for :category do |category_fields| %>
<%= category_fields.label :title %>
<%= category_fields.text_field :title %>
<% end %>
<%= form.button "Add Post" %>
<% end %>
Он не сохраняет заголовок category
при отправке формы Post.
Параметры отладки
utf8: ✓
authenticity_token: 08/I6MsYjNUhzg4W+9SWuvXbSdN7WX2x6l2TmNwRl40=
post: !ruby/hash:ActionController::Parameters
body: 'The best ice cream sandwich ever'
category: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
title: 'Cold Treats'
button: ''
action: create
controller: posts
Журнал приложений
Processing by BusinessesController#create as HTML
Parameters: {"utf8"=>"✓",
"authenticity_token"=>"08/I6MsYjNUhzg4W+9SWuvXbSdN7WX2x6l2TmNwRl40=",
"post"=>{"body"=>"The best ice cream sandwich ever"},
"category"=>{"title"=>"Cold Treats", "button"=>""}
В консоли Rails.. Я могу выполнить следующее успешно
> a = Post.new
=> #<Post id: nil, body: "">
> a.category
=> nil
> b = Post.new
=> #<Post id: nil, body: "">
> b.build_category
=> #<Post id: nil, title: nil>
> b.body = "The best ice cream sandwich ever"
=> "The best ice cream sandwich ever"
> b.category.title = "Cold Treats"
=> "Cold Treats"
Вопросы, которые у меня есть, касаются того, как решить эту проблему:
- Я не уверен, что мне нужно добавить
:category_attributes
в сильном параметреpost_params
? - Если параметры журналов и отладки показывают, что атрибуты
category
вложены внутри параметраPost
? - В хэш-параметре
category
имеется пустой ключbutton
, который не находится в моемfields_for
. Я что-то упускаю при использовании помощников формы? - Является причиной, потому что действие create не принимает
build_category
, и мне нужно будет добавить это к созданию действие? - Будут ли проверки на модели
category
(presence: true
) автоматически используется в формеPost
?
Спасибо заранее.