【问题标题】:Creating a new record in one-to-many relation in ruby on rails在 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 作为字符串传递,但我希望它作为整数传递,以便我可以将它与当前问题相关联。 我该怎么做,或者有没有其他方法可以做到。

【问题讨论】:

    标签: ruby-on-rails ruby activerecord associations


    【解决方案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 操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    相关资源
    最近更新 更多