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

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

问题描述:

我有两个模型一个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来构建它。

我非常确定这只是在正确的控制器中建立关联的问题,我相信对您而言,它是主题控制器。

+0

Thx,快速的回答它帮助我很多!一个问题留给我。它设置外键正确,但**:文本**不是。 – dot

+0

问题已解决 – dot

你的观点应该是如下:

f.fields_for :topic_content do |content_fields| 
         ^