Ruby on rails rails中不使用资源和脚手架的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更新后 #在这里做你的更新

我是rails的新手,我已经学会了如何使用scaffold和resource来执行CRUD,我想知道如何在不使用resource的情况下执行CRUD,但是我想做的是在控制器中为CRUD创建自定义方法,就像传统的CRUD模型一样。请帮我解决这个问题。

为了使用您自己的自定义方法,您需要在控制器中创建它们,设置路由,并在需要时创建视图

#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" %>