陷入了使用rails的编辑方法

时间:2016-10-14 12:32:09

标签: ruby-on-rails ruby

我陷入了一种简单的编辑方法,直到我解决它才能继续。

我在索引视图中有一个项目列表,每个项目都有一个视图项目按钮,一个删除按钮和一个编辑按钮。

我对创建,显示和删除没有任何问题,但我坚持使用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”所做的结构。但此刻我没有看到解决方案。

1 个答案:

答案 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

更接近您可能打算/尝试做的事情。