RoR:我不知道如何使用取自 text_field 的两个整数添加新记录
Posted
技术标签:
【中文标题】RoR:我不知道如何使用取自 text_field 的两个整数添加新记录【英文标题】:RoR: I can't figure out how to add a new record using two integers taken from a text_field 【发布时间】:2013-12-06 11:30:27 【问题描述】:我已经尝试了一天多的时间来解决这个问题 - 所以希望有人可以为我阐明这个问题。
我相信问题源于我使用生成模型而不是脚手架创建新模型(主题)。因此,我一直在将我拥有的所有内容与我的用户模型(它有效,并且主要源自 Hartl 的教程)与我的主题模型进行比较,但我找不到任何东西。
所以我试图通过 create 命令添加一个新主题,但它什么也没做。该页面甚至在移动到索引之前就可以正常工作。我可以从控制台添加主题。任何帮助将不胜感激。
subjects_controller.rb
class SubjectsController < ApplicationController
def index
@subjects = Subjects.paginate(page: params[:page])
end
def new
@subject = Subjects.new
end
def create
@subject = Subjects.new(subject_params)
if @subject.save
flash[:success] = "Subject added to database."
redirect_to @subject
else
render 'new'
end
end
def show
@subjects = Subjects.find(params[:id])
end
private
def subject_params
params.require(:subject).permit(:subject_id)
end
end
主题/new.html.erb
<div class="row">
<div class="span6 offset3">
<%= form_for(@subject) do |f| %>
<!-- Look for errors -->
<% if @subject.errors.any? %>
<div id="error_explanation"></div>
<h2>
<%= pluralize(@user.errors.count, "error") %> prohibited this subject from being saved:
</h2>
<ul>
<% @subject.errors.full_message.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<!-- Add new subject to Subjects -->
<p>Subject:</p>
<%= f.text_field :subject_id %>
<%= f.submit "Add Subject", class: "btn btn-large btn-primary" %>
<% end %>
</div>
</div>
subjects.rb
class Subjects < ActiveRecord::Base
attr_accessible :subject_id, :study_site, :treatment_group
validates :subject_id, presence: true, length: is: 4 , numericality: only_integer: true , presence: true, uniqueness: true
validates :study_site, presence: true, length: is: 1 , numericality: only_integer: true , presence: true
# validates :subject_id, :study_site, :numericality => :only_integer => true
end
编辑 1。
错误日志(localhost/server.log)
在 2013-11-21 11:59:51 -0800 开始 POST "/subjects_index" 为 127.0.0.1 由 SubjectsController#index 处理为 HTML 参数:"utf8"=>"✓", "authenticity_token"=>"xqE/7CY2awqNy2E6DainqEKxU70DJ4uGr6hB8+qSmhE=", "subjects"=>"subject_id"=>"5001", "study_site"=>"3" , "提交"=>"添加主题" 主题加载 (0.4ms) SELECT "subjects".* FROM "subjects" LIMIT 30 OFFSET 0 在布局/应用程序中渲染的主题/index.html.erb (1.9ms) 渲染布局/_shim.html.erb (0.0ms) 用户负载 (0.3ms) SELECT "users".* FROM "users" WHERE "users"."remember_token" = '1a-UA_7SDRyrc7Pd1zKU5g' LIMIT 1 渲染布局/_header.html.erb (2.1ms) 渲染布局/_footer.html.erb (0.2ms) 在 36.2 毫秒内完成 200 次 OK(查看次数:35.0 毫秒 | ActiveRecord:0.7 毫秒)
在 2013-11-21 11:59:51 -0800 开始 GET "/assets/application.css?body=1" for 127.0.0.1 服务资产 /application.css - 304 未修改(9 毫秒) [2013-11-21 11:59:51] 警告无法确定响应正文的内容长度。设置响应的内容长度或设置 Response#chunked = true
解决方案:
以防万一有人遇到同样的问题。我最终将每个变量从“主题”重命名为“主题”。这引起了一些问题,因为其中一些实际上应该是“主题”。所以我运行 rails generate model Subject,然后更新新的迁移文件,然后运行 bundle exec rake db:migrate,现在一切似乎都正常了。
感谢您的帮助!
【问题讨论】:
服务器日志有错误吗?此外,模型应该单独命名(Subject
而不是Subjects
)。这可能会导致 ActiveRecord 如何推断您的数据库架构出现问题。
感谢您的回复。从服务器日志中我看到: 304 Not Modified ... WARN 无法确定响应正文的内容长度。至于主题而不是主题,您会建议我只是回滚并重新制作模型,还是有更简单的方法将其重命名为“主题”?
不是那个错误,你确定没有其他错误吗?就模型而言,是的,回滚和再生可能是最简单的。您可以使用 rails d model [...]
与您生成它时使用的相同参数来自动删除所有文件。
我不确定没有其他人,但我没有看到任何人。到目前为止,两个 cmets 都提到 Subjects 应该是单数的,所以我会继续花一些时间来解决这个问题。再次感谢。
问题似乎是表单正在由index
操作而不是create
处理。尝试在 form_for
上指定 url: action: "create"
。
【参考方案1】:
您也可以考虑更改 routes.rb 中的路径,而不是更改位置的变量名称
如果您在此处提及 :as => 'Subjects',那么您可能会收到此错误。 这也可以通过更改所有变量名来解决,但这会更容易。
【讨论】:
【参考方案2】:我无法确定确切的问题,但我可以推荐以下可能解决问题的更改:
重命名你的模型类Subject
(单数)。
rails 约定是将模型命名为单数,控制器命名为复数 (SubjectsController
)。
如果你使用强参数,我也不确定你是否需要attr_accessible
。
您能发布您收到的错误消息吗? (服务器日志)
【讨论】:
感谢您的回复。我正在将我的模型重命名为主题。我更新了我的帖子以包含错误消息。目前,我假设至少我的一些问题源于我的模型类的复数名称,所以我会努力解决这个问题。 没问题,一定要在这里查看renaming a model 上的说明(别担心,我们总有一天会这样做:)) 所以我不想乞求声誉,但是如果重命名解决了您的问题,您应该将答案标记为正确。以上是关于RoR:我不知道如何使用取自 text_field 的两个整数添加新记录的主要内容,如果未能解决你的问题,请参考以下文章