ruby-on-rails - 里亚尔路由错误:因为控制器名称与型号名称不同?
问题描述
每个人!我是 Rails 新手,正在编写 Codecademy 教程。但我想看看我是否可以使用 VS Code 在我的 Mac 上运行相同的应用程序并遇到一些障碍。该应用程序基本上是创建一个接收消息并显示它的表单(在索引视图中)。我想探索将控制器和模型的名称更改为我想要的名称,并猜测我搞砸了内部路由。以下是控制器(messagec)
class MessagecController < ApplicationController
def index
@messages1 = MessagesMo1.all
end
def new
@messages2 = MessagesMo1.new
end
def create
@messages2 = MessagesMo1.new(message_params)
if @messages2.save #tells if the object is saved successfully in db or not
flash[:success] = "Great! Your post has been created!"
redirect_to '/messages'
else
flash.now[:error] = "Fix your mistakes, please."
render 'new'
end
end
private
def message_params
params.require(:message).permit(:content)
end
end
以下是模型(messagesmo1)
class CreateMessagesMo1s < ActiveRecord::Migration[6.0]
def change
create_table :messages_mo1s do |t|
t.text :content
t.timestamps
end
end
end
以下是routes.rb文件
get '/messages' => 'messagec#index'
get '/messages/new' => 'messagec#new'
post 'messages' => 'messagec#create'
post 'messages_mo1s' => 'message_mo1s#create'
以下是 create.html.erb 文件中的代码
<%= form_for(@messages2) do |f| %>
<div class = "field">
<%= f.label :message %><br>
<%= f.text_area :content %>
</div>
<div class = "actions">
<%= f.submit "Create" %>
</div>
<% end %>
我能够看到消息列表并能够去创建新的消息页面。但是当我提交表单时,我收到以下路由错误:
未初始化的常量 MessageMo1sController 您的意思是?MessagecController MessagesMController
我的第一个问题是:1)我在 routes.rb 文件中缺少什么?2) 命名模型与控制器命名有什么规则吗?
解决方案
我只是复制了以上所有内容,我认为有很多事情要记住。
您的模型文件必须具有名称
messagesmo1.rb
并且在此模型中:class MessagesMo1 < ApplicationRecord end
您的控制器文件应该是名称
messagec_controller.rb
并在其中:def index @messages1 = MessagesMo1.all end def new @messages2 = MessagesMo1.new end def create @messages2 = MessagesMo1.new(message_params) if @messages2.save #tells if the object is saved successfully in db or not flash[:success] = "Great! Your post has been created!" redirect_to '/messages' else flash.now[:error] = "Fix your mistakes, please." redirect_to '/messages/new' end end private def message_params params.require(:messages_mo1).permit(:content) end
上面这点,看
message_params
部分,一定是:messages_mo1
而不是:message
_form.html.erb
文件无需更改您的迁移文件必须具有名称
timestamp__create_messages_mo1s.rb
,并且必须具有:class CreateMessagesMo1s < ActiveRecord::Migration[6.0] def change create_table :messages_mo1s do |t| t.text :content t.timestamps end end end
在您的
routes.rb
文件中,更改最后一条路线:get '/messages' => 'messagec#index' get '/messages/new' => 'messagec#new' post 'messages' => 'messagec#create' post 'messages_mo1s' => 'messagec#create'
确保您的所有链接都在
index.html.erb
、 inshow.html.erb
和 in中更新new.html.erb
-> Like 链接以显示、删除、编辑等。或者如果您只是测试删除这些链接。进行上述更改后,运行
rails db:drop db:create db:migrate
它会清除旧迁移的数据库。就是这样,现在一切都应该工作了。主要问题是命名约定应该是所有文件的标准。所以最好使用标准约定。
推荐阅读
- python - 如何在 create() 函数中获取动态 many2many 字段的值
- python - Python:如何在字符串中的某些单词之间找到文本?
- powershell - 无法正确显示 ComboBox 文本
- r - R在for循环内的if else语句下索引函数并返回正确的值
- mysql - Waterline - 字段总和的位置
- javascript - 使用谷歌表格脚本登录网页
- javascript - 从对象数组中获取特定数据并转换为对象
- sql - 如何在 Postgres 中使用动态角色密码?
- mysql - 多对多 Jpa 查询 Spring boot
- angular - 循环一周中的几天并在Angular的数据表中输出