Ruby on rails rails中不使用资源和脚手架的CRUD模型
我是rails的新手,我已经学会了如何使用scaffold和resource来执行CRUD,我想知道如何在不使用resource的情况下执行CRUD,但是我想做的是在控制器中为CRUD创建自定义方法,就像传统的CRUD模型一样。请帮我解决这个问题。为了使用您自己的自定义方法,您需要在控制器中创建它们,设置路由,并在需要时创建视图Ruby on rails rails中不使用资源和脚手架的CRUD模型,ruby-on-rails,crud,Ruby On Rails,Crud,我是rails的新手,我已经学会了如何使用scaffold和resource来执行CRUD,我想知道如何在不使用resource的情况下执行CRUD,但是我想做的是在控制器中为CRUD创建自定义方法,就像传统的CRUD模型一样。请帮我解决这个问题。为了使用您自己的自定义方法,您需要在控制器中创建它们,设置路由,并在需要时创建视图 #PostsController def创建_post #你在这里创作吗 终止 def read_post #你在这里读东西吗 终止 def更新后 #在这里做你的更新
#PostsController
def创建_post
#你在这里创作吗
终止
def read_post
#你在这里读东西吗
终止
def更新后
#在这里做你的更新
终止
def delete_post
#在这里删除你的东西吗
终止
#路由
将“/create_post”张贴到:“posts#create_post”
获取“/read_post/:id”到:“posts#read_post”
将“/update_post/:id”放到:“posts#update_post”
删除“delete_post/:id”,改为:“posts#delete_post”
使用控制器和路线设置,您只需要查看
read\u post
方法。最好的方法是创建文件:views/posts/read_post.html.erb
有7个CRUD路由可供创建、读取、更新和删除
Rails.application.routes.draw do
get "restaurants", to: "restaurants#index"
get "restaurants/new", to: "restaurants#new", as: :new_restaurant
post "restaurants", to: "restaurants#create"
# NB: The `show` route needs to be *after* `new` route.
get "restaurants/:id", to: "restaurants#show", as: :restaurant
get "restaurants/:id/edit", to: "restaurants#edit", as: :edit_restaurant
patch "restaurants/:id", to: "restaurants#update"
delete "restaurants/:id", to: "restaurants#destroy"
end
因此,一旦创建了路由,就可以在控制器中创建所需的操作
class RestaurantsController < ApplicationController
def index
@restaurants = Restaurant.all
end
end
class RestaurantController
那景色呢
app/views/restaurants/index.html.erb
最佳实践是只创建您需要的路线,并在筒仓中工作。
1个路由,1个控制器操作,1个视图。实际上,对于操作索引/new/show/create/edit/update/destroy,这是Ruby On Rails中的惯例 如果我是对的,并且如果您试图使用routes.rb中的资源更改它们的名称(通过示例将新操作更改为def my_restaurant),Rails将呈现 未知操作找不到该操作的“新建” 餐厅控制器 不过,您可以创建一些方法来执行索引中的某些特定操作,并将它们添加到“private”部分中,以便向公众隐藏它们。此方法没有附加任何路由
class RestaurantsController < ApplicationController
def index
@restautants = Restaurant.all
@restaurants.sort_by_name
end
private
def sort_by_name
#some action here
end
end
我希望这将帮助您完成前面的回答
关于你的第二个问题:
我仍然有一个疑问。。。。。将
此表单足以用于新发布和编辑发布,会自动更新吗
识别他们?如果这还不够,你能告诉我是什么吗
来自new_post.html.erb和edit_post.html.erb…再次感谢您的支持
帮助
如果您的新帖子和编辑帖子的表单相同,我建议您将其放入部分文件。(在这个例子中,我使用了simple_form gem)
#app/views/posts/_form.html.erb
然后在新文件中渲染局部视图
#app/views/posts/new.html.erb
<div>
<h1>New Post</h1>
</div>
<%= render "form" %>
#app/views/posts/new.html.erb
新职位
我希望我能帮你回答这个问题。
阅读时不要犹豫。你也可以找到更多你想要的信息
我的答案可能是多余的,但对我来说,这是更好的解释方式…这样做的目的是什么?也许你的意思是你不想生成模型脚手架?我们为资源生成CRUD,没有资源这是没有意义的。我只是想知道在不使用资源和脚手架的情况下工作流程如何,我认为使用定制方法更舒适,因此我想知道。谢谢,让我来做这件事,我会让你知道它是如何进行的,但我仍然有一个疑问。。。。。此表单是否足以用于新发布和编辑发布,它是否会自动识别它们?如果这还不够,请告诉我new_post.html.erb和edit_post.html.erb上的内容…再次感谢您的帮助。谢谢您,我在您的帮助下完成了这项工作,没有使用资源,但我还需要定制的用户方法,而不是索引…我感谢您的帮助,谢谢您
Rails.application.routes.draw do
resources :reviews, only: [:index, :update] do
collection do
get :history
end
end
end
#app/views/posts/_form.html.erb
<%= simple_form_for(@post) do |f| %>
<%= f.input :name, label: "post name" %>
<%= f.input :photo, as: :file %>
<%= f.submit "Save", class:"btn btn-small btn-success" %>
<% end %>
#app/views/posts/new.html.erb
<div>
<h1>New Post</h1>
</div>
<%= render "form" %>