在 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(model)

如何在 Ruby on Rails 中管理嵌套字段的多对多关系

在 Ruby on Rails/JS 中以模式呈现新表单而不是新页面

Ruby on Rails 中的 Runner

Ruby on Rails。如何在 :belongs to 关系中使用 Active Record .build 方法?