首页 > 解决方案 > Rails 中的 CRUD 模型,不使用资源和脚手架

问题描述

我是 Rails 新手,我已经学会了如何使用脚手架和使用资源进行 CRUD,我想知道如何在不使用资源的情况下进行 CRUD,但是我想要做的是在控制器中为 CRUD 创建自定义方法将像传统的 CRUD 模型一样。请帮我解决一下这个。

标签: ruby-on-railscrud

解决方案


实际上,对于动作索引/new/show/create/edit/update/destroy,这是Ruby On Rails中的约定

如果我是对的,并且如果您尝试使用 routes.rb 中的资源更改他们的名称(例如将新操作更改为 def my_restaurant),Rails 将呈现

未知操作 找不到 RestaurantController 的操作“新”

无论如何,您可以创建一些方法来对索引执行某些特定操作,并将它们添加到您想要将它们隐藏给公众的“私有部分”中。此方法没有附加路由。

class RestaurantsController < ApplicationController
  def index
      @restautants = Restaurant.all
      @restaurants.sort_by_name
    end
    
    private
   
    def sort_by_name
     #some action here
    end
end

如果要创建自己的名称方法,可以对其进行个性化,但不能在 routes.rb 中使用资源“快捷方式”

例如:

 #reviews_controller.rb 
 class ReviewsController < AplicationController 
    
    def index 
      @reviews = Reviews.all
    end

    def update
      @review = Review.find(review_params[:id])
    end
    
    def history
     #some action
    end

    private 

    def review_params
      params.require(:review).permit(:liked, :comment, :id)
   end

 end

然后添加一个视图#app/views/reviews/history.html.erb

不要忘记路线:

Rails.application.routes.draw do

    resources :reviews, only: [:index, :update] do
        collection do
          get :history
        end
      end 
 end 

我希望这会对您有所帮助并完成上一个答案。

至于你的第二个问题:

我仍然有一个疑问.....将 <%= form_for @post do |f| %> 这个表格对于new_post 和edit_post 来说已经足够了,它会自动识别它们吗?如果这还不够,请告诉我 new_post.html.erb 和 edit_post.html.erb 的内容......再次感谢您的帮助。

如果您的 new_post 和 edit_post 的表单相同,我可能会建议您放入部分文件。(对于这个例子,我使用了 simple_form gem)

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

好吧,我希望我能帮助你回答这个问题。不要犹豫,阅读ruby​​ 文档。您也可以找到更多您正在寻找的信息。

我的回答可能是多余的,但这是我清楚地解释它的更好方法......


推荐阅读