标签: ruby

如何读取用户上传的文件,而不将其保存到数据库中

我希望能够读取用户上传的XML文件(小于100kb),但不必先将该文件保存到数据库中.我不需要该文件超过当前操作(其内容被解析并添加到数据库;但是,解析文件不是问题).由于可以使用以下方式读取本地文件

File.read("export.opml")
Run Code Online (Sandbox Code Playgroud)

我想过只为:uploaded_file创建一个file_field,然后尝试用它来读取它

File.read(params[:uploaded_file])
Run Code Online (Sandbox Code Playgroud)

但所有这一切都是抛出一个TypeError(无法将HashWithIndifferentAccess转换为String).我真的尝试了很多不同的东西(包括从/ tmp目录中读取),但是没有一个能够工作.

我希望我的问题的简洁不会掩盖我试图自己解决这个问题所付出的努力,但我不想用一百种方法来污染这个问题,如何不完成它.非常感谢任何插话的人.

这是我的观点:

<% form_for(:uploaded_file, @feed, :url => {:action=>'parse'}, :html=> {:multipart=>true}) do |f| %>  <p>
    <%= f.label :uploaded_file, 'Upload your file.' %><br />
    <%= f.file_field :uploaded_file %>
  </p>
  <p><%= f.submit 'upload' %></p>
<% end %>
Run Code Online (Sandbox Code Playgroud)

我设置了一个处理file_field上传的自定义操作(上传),在提交后,将其传递给另一个自定义操作(解析)进行处理.这可能是我问题的一部分吗?

ruby xml ruby-on-rails

42
推荐指数
2
解决办法
4万
查看次数

Ruby on Rails:如何从显示的子资源中获取错误消息?

我很难理解如何让Rails为渲染XML模板时验证失败的子资源显示明确的错误消息.假设我有以下几个类:

class School < ActiveRecord::Base
    has_many :students
    validates_associated :students

    def self.add_student(bad_email)
      s = Student.new(bad_email)
      students << s
    end
end

class Student < ActiveRecord::Base
    belongs_to :school
    validates_format_of :email,
                  :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i,
                  :message => "You must supply a valid email"
end
Run Code Online (Sandbox Code Playgroud)

现在,在控制器中,假设我们想构建一个简单的API,允许我们在其中添加一个带有学生的新学校(再次,我说,这是一个可怕的例子,但为了问题的目的发挥作用)

class SchoolsController < ApplicationController
    def create
      @school = School.new
      @school.add_student(params[:bad_email])
      respond_to do |format|
          if @school.save
          # some code
          else
            format.xml  { render :xml => @school.errors, :status => :unprocessable_entity }
          end
      end
    end
end
Run Code Online (Sandbox Code Playgroud)

现在验证工作正常,因为电子邮件与Student类中的validates_format_of方法中设置的正则表达不匹配而死亡.但是我得到的输出如下:

<?xml version="1.0" encoding="UTF-8"?>
<errors>
  <error>Students is …
Run Code Online (Sandbox Code Playgroud)

ruby rest activerecord ruby-on-rails

42
推荐指数
3
解决办法
2万
查看次数

在factory_girl中填充与子项的关联

我有一个模型Foohas_many'Bar'.我为每个对象都有一个factory_girl工厂.Bar的工厂与Foo有关联; 它会在创建Bar时实例化Foo.

我想要一个创建包含Bar的Foo的Factory.理想情况下,这个Bar将通过:bar工厂创建,并尊重用于创建Foo的构建策略(create/build).

我知道我可以调用:bar工厂,然后从新的Bar中获取Foo引用.我想避免这种情况; 在我的测试用例中,重要的对象是Foo; 称酒吧工厂似乎有点迂回曲折.此外,我可以看到需要一个有多个条形的Foo.

这在Factory_girl有可能吗?你如何在父母中定义这种关系?

ruby unit-testing factory ruby-on-rails factory-bot

42
推荐指数
1
解决办法
2万
查看次数

你如何将黄瓜情景标记为待定

如何将黄瓜方案标记为待定,以便它不被视为已通过?

Scenario: Guest should not see edit link
# pending implementation
Run Code Online (Sandbox Code Playgroud)

我不应该标记为待定?

ruby rspec cucumber

42
推荐指数
3
解决办法
2万
查看次数

为什么Mac OS X带有ruby/rails?

为什么Mac OS X在预安装的轨道上带有红宝石和红宝石?操作系统实际上是否真的使用它?我可以安全地更新我的Ruby,Rails或Gem版本,而不会随意吐出假人吗?

ruby macos rubygems ruby-on-rails

42
推荐指数
2
解决办法
2万
查看次数

将db从一个heroku应用程序转移到另一个更快

有没有更快的方法将我的生产数据库转移到测试应用程序?

目前我正在使用heroku db:pull我的本地机器,heroku db:push --app testapp但这变得非常耗时.我有一些种子数据,但它不如仅仅使用我的真实数据进行测试那么准确.既然它们都存储在相邻的AWS云中,那么必须有更快的方式来移动数据?

我想过使用heroku包,但是我注意到animate命令已经消失了?

bundles:animate <bundle>     # animate a bundle into a new app 
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails heroku

42
推荐指数
5
解决办法
1万
查看次数

Rails 3.0中的f.error_messages

Rails 3.0已弃用f.error_messages,现在需要插件才能正常工作 - 但我想学习如何以(新)本机方式显示错误消息.我正在按照入门指南进行操作,该指南在实现注释表单时使用了已弃用的方法.例如:

<h2>Add a comment:</h2>
<%= form_for([@post, @post.comments.build]) do |f| %>
  <%= f.error_messages %>
<div class="field">
  <% f.label :commenter  %><br />
  <%= f.text_field :commenter  %>
</div>
<div class="field">
  <%= f.label :body %><br />
  <%= f.text_area :body %>
</div>
<div class="actions">
  <%= f.submit %>
</div>
<% end %>
Run Code Online (Sandbox Code Playgroud)

这是正确的方法(由脚手架生成):

<%= form_for(@post) do |f| %>
  <% if @post.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2>

      <ul>
      <% @post.errors.full_messages.each …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails ruby-on-rails-3

42
推荐指数
4
解决办法
3万
查看次数

使用上帝监视Unicorn - 以非零代码= 1开始退出

我正在制作一个神剧脚本来监视我的独角兽.我从GitHub的示例脚本开始,并一直在修改它以匹配我的服务器配置.一旦神运行,命令如god stop unicorngod restart unicorn工作就好了.

然而,god start unicorn结果WARN: unicorn start command exited with non-zero code = 1.奇怪的是,如果我直接从配置文件中复制启动脚本,它就会像一个全新的野马一样启动.

这是我的开始命令:

/usr/local/bin/unicorn_rails -c /home/my-linux-user/my-rails-app/config/unicorn.rb -E production -D
Run Code Online (Sandbox Code Playgroud)

我在配置文件中声明所有路径都是绝对的.可能阻止此脚本工作的任何想法?

ruby linux ruby-on-rails god unicorn

42
推荐指数
1
解决办法
5154
查看次数

如何在Ruby中搜索数组?

说我有一个字符串数组

arr = ['sandra', 'sam', 'sabrina', 'scott', 'mark', 'melvin']
Run Code Online (Sandbox Code Playgroud)

我将如何像在Rails中的活动记录对象一样搜索此数组.例如,查询"sa"将返回['sandra', 'sam', 'sabrina'].

谢谢!

ruby arrays ruby-on-rails

42
推荐指数
3
解决办法
4万
查看次数

Rspec:如何测试文件操作和文件内容

在我的应用程序中我有这样的代码:

File.open "filename", "w" do |file|
  file.write("text")
end
Run Code Online (Sandbox Code Playgroud)

我想通过rspec测试这段代码.这样做的最佳做法是什么?

ruby testing file-io rspec file

42
推荐指数
4
解决办法
4万
查看次数