编辑列表中的项目仅从 Rails 中的第一个条目中提取值

Editing an item from a list only pulls values from first entry in Rails

我无法在 SO 上或通过 Google 搜索找到答案。

我在索引页上显示了一份提交列表,来自用户的项目显示页。 Url 显示正确的 ID,数据输入成功。

但是,当我针对特定提交单击 'edit' 时,它会跳转到具有正确 url(ID)的编辑表单,但会显示为项目。当您删除提交时,它会成功删除该提交。如果您删除第一个提交,单击编辑时,下一个提交的值将显示并反映在所有其他提交上。我在这里不知所措 - 感谢您的帮助!

提交索引页:

<div class="row wrapper">
  <h2 class="color-blue"><%= @project.title %> Submissions</h2>
  <% if @project.submissions.present? %>
    <% @project.submissions.each do |submission| %>
      <div class="submission">
        <ul>
          <li class="title">
            <%= link_to submission.request_title, project_submission_path(@project, submission) %>
          </li>
          <li class="actions">
            <span class="edit">
              <%= link_to 'edit', edit_project_submission_path(@project, submission), class: 'color-orange' %> |
            </span>
            <span class="delete">
              <%= link_to 'delete', project_submission_path(@project, submission), method: :delete, data: { confirm: 'Are you sure?' }, class: 'color-red' %>
            </span> |
            <span class="send">
              <%= link_to 'send request', '#', class: 'color-atlantis' %>
            </span>
          </li>
            </li>
        </ul>
      </div>
    <% end %>
  <% end %>
  <br>
  <%= link_to "Back to #{@project.title} project", @project, class: 'color-clue' %>
</div>

提交控制器:

class SubmissionsController < ApplicationController

  before_action :authenticate_user!
  before_action :set_project
  before_action :set_submission, only: [:destroy, :update, :edit, :create, :show]

  def index
  end

  def show
  end

  def new
    @submission = @project.submissions.new
  end

  def edit

  end

  def create
    @submission = @project.submissions.new(submission_params)
    @submission.user = current_user

    if @submission.save
      redirect_to @project, notice: 'Music submission was successfully sent.'
    else
      render :new
    end
  end

  def update
    if @submission.update(submission_params)
      redirect_to project_submissions_path(@project), notice: 'Music submission was successfully updated.'
    else
      render :edit
    end
  end

  def destroy
    @submission.destroy
    redirect_to project_submissions_path(@project), notice: 'Music submission was successfully deleted.'
  end

  private

    def set_project
      @project = current_user.projects.find(params[:project_id])
    end

    def set_submission
      @submission = @project.submissions.find_by(params[:submission_id])
    end

    def submission_params
      params.require(:submission).permit(:request_title, :request_music, :notes, :terms)
    end

end

问题出在 set_submission 方法中。应该是

def set_submission
  @submission = @project.submissions.find_by(id: params[:id])
end

def set_submission
  @submission = @project.submissions.find(params[:id])
end

我认为问题出在 params 属性名称中。单击编辑按钮时检查服务器日志。是 submission_id 还是只是 id?