ruby-on-rails - Rails 中的 CRUD 模型,不使用资源和脚手架
问题描述
我是 Rails 新手,我已经学会了如何使用脚手架和使用资源进行 CRUD,我想知道如何在不使用资源的情况下进行 CRUD,但是我想要做的是在控制器中为 CRUD 创建自定义方法将像传统的 CRUD 模型一样。请帮我解决一下这个。
解决方案
实际上,对于动作索引/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 文档。您也可以找到更多您正在寻找的信息。
我的回答可能是多余的,但这是我清楚地解释它的更好方法......
推荐阅读
- python - 使用 for 循环从多个页面抓取网页第 2 部分
- javascript - 如何使用复选框显示或隐藏 RGraph 折线图上的数据点?
- python-3.x - 在 Mac OS 11.0.1 上运行 Python 3.9.1 的 Atom 中的氢追溯错误
- html - 无缘无故添加了不必要的引导悬停类?
- node.js - 安装 next.js 时出现错误
- php - 具有模型特征的 Laravel/Eloquent 碰撞
- django - 组名未在生产中显示
- r - 在带有刻面的ggplot中绘制垂直线
- reactjs - React 搜索和过滤组件无法正常工作
- flutter - 有没有办法在 Flutter 中保存状态,以便 App 从我们离开的地方开始?