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