2017-09-19 5 views
0

SOまたはGoogle検索で回答を見つけることができませんでした。リストからアイテムを編集すると、Railsの最初のエントリの値しか取得されません。

ユーザーのプロジェクトの表示ページから作成されたインデックスページに投稿の一覧が表示されています。 Urlは正しいIDを示し、入力されたデータは正常です。

しかし、特定の投稿の「編集」をクリックすると、正しい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 

答えて

1

問題がset_submission方法です。それは私がのparamsに問題が名を属性だと思う

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

または

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

迅速な対応に感謝します。最初の提案はエラーを返す 'フォームには最初の引数はnilを含めることができないか空でなければならない'と返す ' –

+0

最初のエラーは別の問題であり、フォームにする必要があります。そして恐らく2番目のものでさえ – Ursus

+0

私の提出書類は '<%= form_for([project、submission])do | f |で始まります。 %> ''% 'render' form '、project:@project、submission:@submission%> ' –

3

でなければなりません。編集ボタンをクリックすると、サーバーログを確認します。それはsubmission_idですか、それともidですか?

+0

ああ、ちょうどIDです 'パラメータ:{" project_id "=" "11"、 "id" => "28"} ' –

関連する問題