【发布时间】:2014-02-16 04:47:38
【问题描述】:
整天都在寻找 stackoverflow 的答案。我有一个创建新主题的表格。第一篇文章也应该使用该主题创建。一切都很好,除了 user_id 没有保存到帖子中。
后模型
class Post < ActiveRecord::Base
belongs_to :topic
belongs_to :user
end
主题模型
class Topic < ActiveRecord::Base
belongs_to :forum
belongs_to :user
has_many :posts
accepts_nested_attributes_for :posts
end
后控制器
class PostsController < ApplicationController
def new
@post = Post.new
end
def create
@post = Post.new(post_params)
if @post.save
redirect_to topic_path(@post.topic_id)
else
render 'new'
end
end
private
def post_params
params.require(:post).permit(:content, :topic_id, :topic_name, :user_id)
end
结束
主题控制器
class TopicsController < ApplicationController
def new
@topic = Topic.new
@topic.posts.build
end
def create
@topic = Topic.new(topic_params)
if @topic.save
redirect_to @topic
else
render 'new'
end
end
private
def topic_params
params.require(:topic).permit(
:topic_name,
:forum_id,
:user_id,
posts_attributes: [:id, :content, :topic_id, :topic_name, :user_id ] )
end
end
新/主题视图
<%= form_for(@topic) do |f| %>
<%= f.hidden_field :forum_id, :value => params[:forum_id] %>
<%= f.hidden_field :user_id, :value => current_user.id %>
<%= f.label :topic_name %>
<%= f.text_field :topic_name %>
<%= f.fields_for :posts do |p| %>
<%= p.label :content %>
<%= p.text_area :content %>
<% end %>
<%= f.submit "Post Topic", class: "btn btn-large btn-success" %>
<% end %>
我不完全确定为什么没有将 user_id 传递给帖子。希望比我聪明的人可以帮助我学习该做什么:)
更新
我将主题控制器中的强参数更改为这个。
def topic_params
params.require(:topic).permit(
:topic_name,
:forum_id,
posts_attributes: [:content, :topic_id, :id, '_destroy' ] ).merge(:user_id => current_user.id, posts_attributes: [:user_id => current_user.id])
end
现在 user_id 正在工作,但没有像 :content 这样的 posts_attributes 被保存。我玩这个很开心..
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4