2016-10-14 2 views
0

簡単な編集方法に固執しており、解決するまで続けることができません。レールを使った編集方法に詰まっています

インデックスビューにアイテムのリストがあり、各アイテムにはビューアイテムボタン、削除ボタン、および編集ボタンがあります。

私は作成、表示、削除に問題はありませんが、私は編集方法に固執しています。

この

は私のactivities_controller.rb

def edit 
    @activity = Activity.find(params[:id]) 
    if @activity.update(activity_params) 
     redirect_to @activity 
    else 
     redirect_to :edit 
    end 
end 

private 

    def activity_params 
     params.require(:activity).permit(:name, :description) 
    end 

であり、これは編集ビューである:項目のリストで

<%= form_for(@activity) do |f| %> 
    <p> 
     <%= f.text_field :name %> 
     <%= f.label :name, "Name" %> 
    </p> 
    <p> 
     <%= f.text_area :description" %> 
     <%= f.label :description, "Descripction" %> 
    </p> 
<p> 
    <%= f.submit "save", class: "btn" %> 
</p> 
ビュー:

<% @activities.each do |activity| %> 
    <%= activity.name %> 
    <%= link_to "edit", edit_activity_path(activity), class: "btn"%> 
<% end %> 

すべてにおいて、私が従った例は、表示アイテムビューの編集ボタンを実行し、だから彼らはパスのパラメータとして@activityを使うが、私のループでは@activityを使うことができず、私はactivityを使う。私はここで私の駄目は失敗だと思うが、私はそれを修正する方法を理解することはできません。

例えば、localhost:3000/activities/11/editに入力すると、「param is missing or value:empty」というメッセージが表示されます。

私が前に言ったように、私はそれが@activityではなくpath paramアクティビティとして渡されているので、それが強力なパラメータ "activity_params"に対して行った構造ではないと思います。しかし、この瞬間に私は解決策を見ません。

答えて

5

問題は@activityとは対照的にactivityを使用するインスタンス変数ではありません。問題は、editアクションがフォームを表示するために使用され、実際にモデルを更新するために使用されるupdateアクションと混同されていることです。

def edit 
    @activity = Activity.find(params[:id]) 
end 

def update 
    @activity = Activity.find(params[:id]) 
    if @activity.update(activity_params) 
     redirect_to @activity 
    else 
     render :edit 
    end 
end 

は、あなたが意図している/しようとしているものに近いです。

+0

ああ、私にそれを打つ! :)私は私の答えを削除します。 – SteveTurczyn

+0

もちろん、あなたは正しいです。ありがとうございました! – user6945851

関連する問題