在 ruby on rails 中以一对多关系创建新记录
Posted
技术标签:
【中文标题】在 ruby on rails 中以一对多关系创建新记录【英文标题】:Creating a new record in one-to-many relation in ruby on rails 【发布时间】:2016-05-19 14:25:05 【问题描述】:我正在尝试创建一个应用程序,我们可以在其中提出问题并且一个问题有很多答案。所以我在这里使用了一对多关联。 现在我有两个模型问答和两个控制器问答。 我在 \questions\show.html.erb
中有一个表格<%= form_for @answer, :url => "answer", :method => 'post' do |f| %>
<%= f.hidden_field :question_id, :value => @question.id %> #this i am not sure about
<%= f.text_area :content %>
<%= f.submit "SUBMIT" %>
<% end %>
控制器中的show方法是:
def show
@question = Question.find(params[:id])
@answers = @question.answers
@answer = Answer.new
end
我还创建了一个路由来回答控制器的创建方法
post 'questions/show/answer' => "answers#create"
现在的问题是 question_id 作为字符串传递,但我希望它作为整数传递,以便我可以将它与当前问题相关联。 我该怎么做,或者有没有其他方法可以做到。
【问题讨论】:
【参考方案1】:在您的控制器中使用new
操作为您的表单呈现一个新的答案对象,然后在create
操作中,找到您要回答的问题并在其下创建答案。像这样:
def new
@answer = Answer.new
end
def create
@question = Question.find(params[:id])
@question_created = @question.answers.create(answers_params).save
if @question_created
// do something or redirect somewhere
end
end
private
def answers_params
params.require(:answer).permit(:content)
end
然后在您的路由中,您可以使用资源来创建所需的 RESTful 路由
resources :questions do
resources :answers
end
(注意:每个动作都应该用于特定的要求目的,除非您希望通过 AJAX 调用来获取显示动作中的表单)
【讨论】:
我的表单在另一个控制器的视图中运行,即;我的 form_for(@answer) 在问题控制器的 show.html.erb 视图中.. 这会影响你刚刚给我的代码 不应该。尝试使用我上面提供的代码在 answers 控制器中使用 create 操作。以上是关于在 ruby on rails 中以一对多关系创建新记录的主要内容,如果未能解决你的问题,请参考以下文章
Ruby on Rails,一对多关联(One-to-Many)
如何在 Ruby on Rails 中管理嵌套字段的多对多关系
在 Ruby on Rails/JS 中以模式呈现新表单而不是新页面
Ruby on Rails。如何在 :belongs to 关系中使用 Active Record .build 方法?