0

我正在尝试为我的一个表中的对象设置一个简单的编辑功能。这是我在网上和书中看到的当前代码,但它不起作用

def edit
    @fire_chief = FireChief.find(params[:id])
 end

我所要做的就是弄清楚如何在列表视图中编辑特定的消防队长,我可以继续编程,但我被卡住了。

我收到的错误是“找不到没有 ID 的 FireChief”

如果我使用这段代码,它会发现编辑表单很好

def edit
    @fire_chief = FireChief.last
 end

但它总是拉出最后一个要编辑的条目。我需要它来提取我单击的条目...可能是第 1、第 3 或第 5 等等。我知道其中很多是多余的,但我只想清楚我正在尝试做什么。

这是我的路线文件:

resource :timesheet do
    resource :command_officer
    resources :fire_chief
    resources :fire_fighters
    resource :safety_officer
    resources :emts
    resources :hazmat_specialists
    resources :command_vehicles
    resources :engines
    resources :emergency_supports
    resources :hazmat_units
    resources :field_units
    resources :pumpers
    resources :tankers
    resources :rescue_units
end
end

我刚刚将资源 :fire_chief 更改为复数,所以现在它的资源 :fire_chief

但我现在收到此错误:

路由错误

未初始化的常量 FireChiefController

4

1 回答 1

1

要从您那里获取所需的id数据或任何其他数据,您必须params像以下示例一样在 url 中传递数据:

/firechief/2/edit

这样,您的edit方法将知道 id 并且该方法将起作用。您可以在您的路线中手动设置它,制作这样的路线:

get  "/firechief/:firechief_id/edit" => "firechiefs#edit", as => :edit_firechief

或者,如果您resources在路线内使用,则默认情况下它应该工作。

如果您实际上不想在 url 中传递任何数据,则可以实施基于会话的解决方案。创建一个方法来存储适合您需要idfirechief控制器内部的 ,或者如果您想在firechief#create您已经拥有的方法(如 )中创建会话,则只需添加此行:

session[:firechief] = #here you add the id of the firechief you want to store

现在在您的控制器上,您可以执行以下操作:

def edit
    @fire_chief = FireChief.find(session[:firechief])
end
于 2012-10-25T16:34:26.780 回答