我正在尝试创建一个post
,其中包含表单所在的forum_id
。我需要两个ID才能保存在对象中以实现该目标。
我使用@post
初始化new
操作中的新@post = Forum.find(params[:forum_id]).posts.build
哪个会按照预期的方式将包含forum_id
的帖子的未保存实例吐出来。
然后我在这里填写表格:
<%= form_for @post, :url => {:controller => "posts", :action => "create"} do |f| %>
<% if @post.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2>
<ul>
<% @post.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :title %>
<%= f.text_field :title, class: "form-control" %>
</div>
<div class="field">
<%= f.label :description %>
<%= f.text_area :description, class: "form-control" %>
</div>
<div class="actions">
<%= f.submit class: "btn btn-primary" %>
</div>
<% end %>
当我点击提交按钮并在post_params
操作中的@post = Post.new(post_params)
行之后用byebug检查create
时,只有:title
和:description
来了通过。 forum_id
在两次操作之间丢失,如果没有它,我就无法保存@post
。我:forum_id
已将post_params
列入白名单但未通过。我认为如果在post
操作中使用new
创建forum_id
的实例,则该实例应该保留在create
内的post_params
操作中这里错了。以下是可能有助于解决我的问题的相关信息。
我的模特关系:
# User model
has_many :forums
has_many :posts
# Forum model
belongs_to :user
has_many :posts
# Post model
belongs_to :user
belongs_to :forum
# post_controller
def new
@post = Forum.find(params[:forum_id]).posts.build
end
后控制器
def create
@post = Post.new(post_params)
respond_to do |format|
if @post.save
format.html { redirect_to @post, notice: 'Post was successfully created.' }
format.json { render :show, status: :created, location: @post }
else
format.html { render :new }
format.json { render json: @post.errors, status: :unprocessable_entity }
end
end
end
...
# Rest of actions
...
def post_params
params.require(:post).permit(:title, :description, :forum_id, :user_id)
end
end
答案 0 :(得分:2)
表格没有提交forum_id,因为它不存在
我认为您需要将此添加到该表单
<%= f.hidden_field :forum_id %>