嵌套属性不会保存在数据库中
问题描述:
我有两个模型一个Topic和Topic_Content。嵌套属性不会保存在数据库中
用下面的代码
路线
resources :topics do
resources :topic_contents
end
主题
class Topic < ActiveRecord::Base
has_one :topic_content
accepts_nested_attributes_for :topic_content
end
TopicContent
class TopicContent < ActiveRecord::Base
belongs_to :topics
end
控制器
class TopicsController < ApplicationController
def new
@topic = Topic.new
end
def create
# render text: params[:topic].inspect
@topic = Topic.new(topic_params)
@topic.save
end
private
def topic_params
params.require(:topic).permit(:title, topic_content_attributes: [:text])
end
end
查看
<%= form_for @topic do |f| %>
<%= f.label 'Topic:' %>
<%= f.text_field :title %>
<%= f.fields_for :topic_contents do |tf| %>
<%= tf.label :text %>
<%= tf.text_area :text %>
<% end %>
<%= f.submit %>
<% end %>
的冠军将在主题表保存正确的,但topic_content(文本)将不会保存在数据库,我找不到问题。
答
我不是一个Rails的专家,但我敢肯定,你需要建立在你的控制器的关联。
在新的和编辑的操作,你需要有:
def new
@topic = Topic.new
@topic_content = @topic.build_topic_content
end
因为这是一个HAS_ONE/belongs_to的你需要把它看上去那样。如果它是一个很多的关联,你会用@topic_content = @ topic.topic_contents.build来构建它。
我非常确定这只是在正确的控制器中建立关联的问题,我相信对您而言,它是主题控制器。
答
你的观点应该是如下:
f.fields_for :topic_content do |content_fields|
^
Thx,快速的回答它帮助我很多!一个问题留给我。它设置外键正确,但**:文本**不是。 – dot
问题已解决 – dot