假设我在Rails中有一个Book模型,并且这个资源模型有预定义的路由,例如/books/:id/edit。
现在,在我的应用程序中,我希望显示一个图书列表,并添加一个编辑按钮,每个人都可以编辑这本书,但只有一个特定的字段。我希望通过使用不同的路径和不同的控制器提供不同的视图来实现这一点。
我应该如何定义路由以使其工作,即根据需要传递Book实例的id?
发布于 2022-10-07 12:55:33
听起来你可以
rails g model book field_one field_two
rails g controller books# routes.rb
resources :books
patch 'common_update/:id', to: 'books#common_update'如果您特别想要访问另一个控制器,那么只需创建一个不同的控制器(rails g contoller_name),然后用contoller_name替换路由中的books (注意生成器需要一个复数!)。
# books_controller.rb
def common_update
@book = Book.find(params[:id])
if @book.update(common_params)
# do something
else
# do something else
end
end
def common_params
params.require(:book).permit(:field_one) # but not field_two !
end至于视图,您也许可以有条件地为所有者(创建图书的用户)和其他人呈现表单。如果您想要一个单独的视图/显示,还可以在正确的:+1文件夹中添加路由(:+1)和一个视图文件:
https://stackoverflow.com/questions/73987298
复制相似问题