Ruby on rails 嵌套资源路径的简单表单

Ruby on rails 嵌套资源路径的简单表单,ruby-on-rails,simple-form-for,Ruby On Rails,Simple Form For,我正在尝试在Rails 5中制作一个应用程序,用于发布任务的答案 任务内容和答案表格在同一页中 当用户进入任务页面时,他可以看到任务内容 他可以发布(创建)答案或编辑答案 我得到一个错误: 任务中的命名错误#显示 未定义的方法“to_key”# 你是说?询问 设置 到 我做错了什么? 您还需要哪些信息来帮助调试此问题 我真的很感激任何帮助 模型 ``` 结束 ``` 控制器 ``` #tasks_controller.rb 类TasksController 任务回答路径(@task),方法::

我正在尝试在Rails 5中制作一个应用程序,用于发布任务的答案

任务内容和答案表格在同一页中

当用户进入任务页面时,他可以看到任务内容

他可以发布(创建)答案或编辑答案

我得到一个错误:

任务中的命名错误#显示 未定义的方法“to_key”# 你是说?询问 设置 到

我做错了什么? 您还需要哪些信息来帮助调试此问题

我真的很感激任何帮助


模型 ```

结束

```

控制器 ```

#tasks_controller.rb
类TasksController
结束

```

意见 ```


task\u answer\u路径(@task,@answer),方法::put do | f |%>
任务回答路径(@task),方法::post do | f |%>

```

我知道可能有什么问题,下面这行返回的是ActiveRecord::Relation,而不是实例本身,您需要在应答查询的末尾附加“first”,如下所示:

 @answer = Answer.where(task: @task, user: current_user).first

我知道可能有什么问题,下面这行返回的是ActiveRecord::Relation,而不是实例本身,您需要在应答查询的末尾附加'first',如下所示:

 @answer = Answer.where(task: @task, user: current_user).first

to_key
在您发布的代码中没有任何地方是的,我不知道为什么会发生错误。@floox您能指出异常的行号吗?我会用byebug将中断放在那里,并手动运行以下几行以更好地理解它。
to_key
在您发布的代码中没有任何地方是的,我不知道为什么会发生错误。@floox您能指出异常的行号吗?我会用byebug在那里进行中断,并手动运行以下几行代码,以便更好地理解它。太棒了,非常感谢。问题解决了@fabriciofreitagI get anthoer问题:在用户发布答案后,我如何让答案的内容在任务页面中显示。@floox,你能在另一个问题中发布并链接到这里吗?现在是我时区的凌晨3点,我要到明天晚上才能回复。太棒了,非常感谢。问题解决了@fabriciofreitagI get anthoer问题:在用户发布答案后,我如何让答案的内容在任务页面中显示。@floox,你能在另一个问题中发布并链接到这里吗?我的时区是凌晨3点,我要到明天晚上才能回复。
resources :tasks, only: [:show] do
 resources :answers #, only: [:new, :create, :edit, :update]
# tasks_controller.rb

class TasksController < ApplicationController
  before_action :authenticate_user!, only: [:show]

  def show
    @task = Task.find(params[:id])
    @post = @task.post

    if @task.answers.present?
      @answer = Answer.where("task_id = ? and user_id = ?", @task.id, current_user.id)
    else
      @answer = Answer.new
    end
  end


 end


# answers_controller.rb

def new
  @task = Task.find(params[:task_id])
  @answer = Answer.new
end

def create
  @task = Task.find(params[:task_id])
  @answer = Answer.new(answer_params)
  @answer.task_id = @task.id
  @answer.user_id = current_user.id

  if @answer.save
    redirect_to post_path(@task.post), notice: "Answer Added."
  else
    render :new
  end
<div class="answer-form">
<%= simple_form_for [@task, @answer], :url => task_answer_path(@task, @answer), method: :put  do |f| %>
  <% if @task.answers.present? %>
   <%= f.input :content, id: "x", value: @task.answers.first.content,
               input_html: {class: "hidden"}, name: "content", label: false %>
   <trix-editor input="x" class="formatted_content trix-content"></trix-editor>

   <div class="form-actions">
     <%= f.submit "Submitting", class: "assignment-btn", data: {disable_with: "Submitting..."} %>
   </div>
<% end %>

<% else %>

   <%= simple_form_for [@task, @answer], :url => task_answers_path(@task), method: :post do |f| %>
                <%= f.input :content, id: "x", value: "content",
                            input_html: {class: "hidden"}, name: "content", label: false %>
                <trix-editor input="x" class="formatted_content trix-content"></trix-editor>

                <div class="file-upload-block">
                    <input name="fileToUpload[]" id="fileToUpload" type="file">
                </div>

                <div class="form-actions">
                  <%= f.submit "提交", class: "assignment-btn", data: {disable_with: "Submitting..."} %>
                </div>
               <% end %>


<% end %>
</div>
 @answer = Answer.where(task: @task, user: current_user).first