我陷入了一种简单的编辑方法,直到我解决它才能继续。
我在索引视图中有一个项目列表,每个项目都有一个视图项目按钮,一个删除按钮和一个编辑按钮。
我对创建,显示和删除没有任何问题,但我坚持使用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 %>
在我所遵循的所有示例中,他们在show item视图中执行编辑按钮,因此他们使用@activity作为路径参数,但在我的循环中我不能使用@activity并使用activity
。我认为这是我的菜鸟失败,但我无法弄清楚如何解决它。
所以当我输入例如localhost:3000 / activities / 11 / edit时,它会显示消息“param is missing or value is empty:activity”。
正如我之前所说的,我认为这是因为我作为路径参数活动而不是@activity传递,然后它没有我为强参数“activity_params”所做的结构。但此刻我没有看到解决方案。
答案 0 :(得分: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
更接近您可能打算/尝试做的事情。