Ruby on rails Rails:从表单发布到M:M表

Ruby on rails Rails:从表单发布到M:M表,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,在“组索引”页面上,我显示了组讨论列表和创建新讨论的表单 class Group < ActiveRecord::Base has_many :discussions end class Discussion < ActiveRecord::Base belongs_to :user belongs_to :group end 我可以在params集合中看到组id在那里,但在散列之外。正如我所说,您需要像这样调整创建操作,以便保存组id def create @gro

在“组索引”页面上,我显示了组讨论列表和创建新讨论的表单

class Group < ActiveRecord::Base
  has_many :discussions
end

class Discussion < ActiveRecord::Base
  belongs_to :user
  belongs_to :group
end

我可以在params集合中看到组id在那里,但在散列之外。

正如我所说,您需要像这样调整
创建
操作,以便保存
组id

def create
@group = Group.find(params[:group_id])
@discussion = current_user.discussions.build(discussion_params)
@discussion.group_id = @group.id
 if @discussion.save
   flash[:success] = "Discussion started."
   redirect_to root_url
 end
end

您可以在
表单中为
添加
隐藏的\u字段
,这样保存
组id

<%= f.hidden_field :group_id, :value => @group.id %>
您还需要将
组id
添加到您的
讨论参数中

def discussion_params
  params.require(:discussion).permit(:title, :content, :group_id)
end

是的,这完全是Rails的做法。

请发布您的
参数日志
发布控制器的
新方法!参数:{“utf8”=>“✓", "真实性令牌“=>”Ci5uQOPaRlef6HcCYln/Ks6Ykraqqms8ysCLAa3sG1NiuyzTXLcM3j8CbJKexnqRT4h1hV79uyQ2Jv3FXsf9Bw==”,“讨论”=>{“标题”=>“测试1”,“内容”=>“测试2”},“提交”=>“发布”,“组id”=>“635601”}没有新操作。该对象是在索引操作中生成的。您是否尝试将
@group=group.find(params[:group\u id])
添加到您的创建操作中,并像
@discussion.group\u id=@group.id
那样操作?非常好。谢谢你的帮助。我已经实现了前者,因为如果不需要的话,我不愿意创建一个隐藏字段。对于隐藏字段,我不需要“@group=group.find(params[:group_id])”是否?@user1567212您应该需要它才能为
隐藏字段添加值,即
:value=>@group.id
@user1567212对不起。我想你不需要它。
def create
@group = Group.find(params[:group_id])
@discussion = current_user.discussions.build(discussion_params)
@discussion.group_id = @group.id
 if @discussion.save
   flash[:success] = "Discussion started."
   redirect_to root_url
 end
end
<%= f.hidden_field :group_id, :value => @group.id %>
def create
@group = Group.find(params[:group_id])
@discussion = current_user.discussions.build(discussion_params)
 if @discussion.save
   flash[:success] = "Discussion started."
   redirect_to root_url
 end
end
def discussion_params
  params.require(:discussion).permit(:title, :content, :group_id)
end