我有两个模型,一个是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(文本)不会保存在数据库中,我找不到问题。
答案 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来构建它。
我很确定这只是在正确的控制器中建立关联的问题,我相信,对于你来说,它是主题控制器。