我第一次使用 2 个资源,部门(部门)和成员创建了一个非常基本的 Rails 应用程序。我相信我已经正确使用了嵌套资源,但是由于某种原因,在运行 rails server 之后,父资源的 :id 没有正确生成/传递。Root 是 depts#index,从这里我可以使用在新视图和编辑视图中呈现的 _form.haml 进行新建和编辑。但是,当我执行 /depts/3 时,出现“找不到 id=3 的部门”的错误。单击以从索引进行编辑会在 URL 中给我 /depts/63/edit - 我不确定这个 id=63 来自哪里。尝试通过在 URL 中键入 /dept/63 来执行“显示”操作不起作用。起初我自己创建了 Depts,让它与所有动作和视图一起工作,自从我添加成员资源后出现了问题。
路线.rb
resources :depts do
resources :members
end
depts_controller.rb
def index
@depts = Dept.all
respond_to do |format|
format.html
format.json { render :json => @depts }
end
end
def show
@dept = Dept.find(params[:dept_id])
respond_to do |format|
format.html
format.json { render :json => @dept }
end
end
def new
@dept = Dept.new(params[:dept])
respond_to do |format|
format.html
format.json { render :json => @dept }
end
end
def create
@dept = Dept.new(params[:dept])
respond_to do |format|
if @dept.save
format.html { redirect_to :action => 'index' }
format.json { render :json => @dept }
else
format.html { render :action => 'new' }
format.json { render :json => @dept }
end
end
end
def edit
@dept = Dept.find(params[:id])
end
def update
@dept = Dept.find(params[:id])
respond_to do |format|
if @dept.update_attributes(params[:dept])
format.html { redirect_to :action => 'index'}#, :id => @dept }
format.json { render :json => @dept }
else
format.html { redirect_to :action => 'edit' }
format.json { render :json => @dept }
end
end
end
def destroy
@dept = Dept.find(params[:id])
@dept.destroy
respond_to do |format|
format.html { redirect_to :action => 'index' }
format.json { render :json => @dept }
end
end
end
显示.haml
%p= @dept.name
%p= link_to "back", {:action => 'index'}
索引.haml
%h1 DEPARTMENTS
%ol
- @depts.each do |d|
%li= link_to d.name
%p= link_to 'edit department', edit_dept_path(d)
%p= link_to 'get rid of department!', d, :method => :delete, :id => d.id
%br
%p= link_to "ADD A NEW DEPARTMENT", new_dept_path