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 的两个整数添加新记录的主要内容,如果未能解决你的问题,请参考以下文章

在 RoR 中将变量值注入 javascript 和 HAML

如何使用 capybara 使用验证码登录表单?

结束haml评论

视图如何知道 RoR 中的自己的 url [重复]

ASM ROR 是做啥的?

如何在Javascript中知道ROR动作名称