嵌套属性不会保存在数据库中

时间:2014-03-05 21:43:27

标签: ruby-on-rails

我有两个模型,一个是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(文本)不会保存在数据库中,我找不到问题。

2 个答案:

答案 0 :(得分:1)

您的观点应如下:

f.fields_for :topic_content do |content_fields|
                          ^

答案 1 :(得分:1)

我不是Rails专家,但我确定你需要在控制器中建立关联。

在新的和编辑操作中,您需要:

def new 
  @topic = Topic.new 
  @topic_content = @topic.build_topic_content
end

因为这是一个has_one / belongs_to,你需要让它看起来那样。如果它是一个很多关联,你可以用@topic_content = @ topic.topic_contents.build来构建它。

我很确定这只是在正确的控制器中建立关联的问题,我相信,对于你来说,它是主题控制器。