2016-10-14 51 views
0

我卡在一個簡單的編輯方法,不能繼續下去,直到我解決它。卡在一個編輯方法與軌道

我有一個索引視圖中的項目列表,每個項目都有一個查看項目按鈕,刪除按鈕和編輯按鈕。

我沒有創建,顯示和刪除的問題,但我堅持te編輯方法。

這是我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。我認爲這是我noob失敗,但我不知道如何解決它。

所以,當我進入例如本地主機:3000 /活動/ 11 /編輯它顯示消息「參數丟失或值是空的:活動」。

正如我之前所說,我認爲這是因爲我作爲路徑參數活動而不是@activity傳遞,然後它沒有爲強參數「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