RoR:我无法弄清楚如何使用text_field中的两个整数添加新记录

时间:2013-11-21 19:41:42

标签: ruby-on-rails activerecord integer scaffold

我一直试图解决这个问题超过一天 - 所以希望有人可以为我解决这个问题。

我认为问题源于我使用生成模型而不是支架创建我的新模型(主题)。所以我一直在比较我的所有用户模型(有效,主要是从Hartl的教程中得到的)到我的Subjects模型,我找不到任何东西。

所以我试图通过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为127.0.0.1开始POST“/ subjects_index”   由SubjectsController处理#index为HTML     参数:{“utf8”=&gt;“✓”,“authenticity_token”=&gt;“xqE / 7CY2awqNy2E6DainqEKxU70DJ4uGr6hB8 + qSmhE =”,“subject”=&gt; {“subject_id”=&gt;“5001”,“study_site”=&gt; ;“3”},“commit”=&gt;“添加主题”}     主题加载(0.4ms)SELECT“subject”。* FROM“subject”LIMIT 30 OFFSET 0     在布局/应用程序内渲染subject / 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.2ms完成200 OK(浏览次数:35.0ms | ActiveRecord:0.7ms)

     

在2013-11-21 11:59:51 -0800开始获取127.0.0.1的“/assets/application.css?body=1”   服务资产/application.css - 304未修改(9ms)   [2013-11-21 11:59:51]警告无法确定响应正文的内容长度。设置响应的内容长度或设置Response#chunked = true

解决方案:

如果有人遇到同样的问题。我最终将每个变量重命名为“Subjects”中的“Subject”。这引起了一些问题,因为其中一些实际上应该是“主题”。所以我运行了rails generate model,然后更新了新的迁移文件,然后运行了bundle exec rake db:migrate,现在一切似乎都在运行。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您可以考虑在routes.rb

中更改路径,而不是在地方更改变量名称

如果你提到过:as =&gt; '主题'那里,你可能会收到这个错误。 这可以通过更改所有变量名来解决,但这会更容易。

答案 1 :(得分:0)

我无法确定确切的问题,但我可以推荐以下可能解决问题的更改:

重命名模型类Subject(单数)。

rails惯例是将模型命名为单数,控制器复数(SubjectsController)。

如果您使用强参数,我也不确定您是否需要attr_accessible

您可以发布您收到的错误消息吗? (服务器日志)