编辑列表中的项目仅从 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?
我无法在 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?