在我的表sqlite3表中找不到一行

时间:2012-10-25 16:11:31

标签: ruby-on-rails ruby ruby-on-rails-3 sql-update replace

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

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

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

我收到的错误是“找不到没有身份证的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

1 个答案:

答案 0 :(得分:1)

要从id获取所需的params或任何其他数据,您必须在网址中传递数据,如下例所示:

/firechief/2/edit

这样您的edit方法就会知道id,方法也可以。您可以在路线中手动设置,制作如下路线:

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

或者,如果您在路线中使用resources,则默认情况下该工作正常。

如果您实际上不想在网址中传递任何数据,则可以实施基于会话的解决方案。创建一个方法将id firechief存储在适合您需要的控制器中,或者如果要在方法内创建会话(如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