小编Sim*_*tti的帖子

Rails和I18n:本地化模板与本地化字符串

您可能知道,从Rails 2.2开始,Rails附带了一个简单的本地化和国际化后端.

默认情况下,您可以将要翻译的字符串存储在文件config夹中的本地化文件中.

config/locales/en.yml
config/locales/it.yml
Run Code Online (Sandbox Code Playgroud)

但Rails也提供了本地化模板和部分的能力.例如,MainController #index操作可以根据模板文件名和当前区域设置选择本地化模板.

apps/views/main/index.it.html.erb
apps/views/main/index.en.html.erb
Run Code Online (Sandbox Code Playgroud)

当您需要翻译单个字符串或短段落时,第一个功能非常有用.当相同的动作根据当前的区域设置值以不同的方式呈现时,后者是一个很好的选择.

但是,您如何处理共享相同业务逻辑但包含大量文本的公平简单模板?以下面的模板为例

<% javascript_content_for :head do %>
$(function() {
  $("#choices :radio").change(function() {
    $(".choice-wizard").hide();
    $("#" + $(this).val()).show();
  });
});
<% end %>

<h1><%= title t(".title") %></h1>

<div class="widget">
  <div class="entry form">

    <h2><%= title t(".header_choices") %></h1>

    <% form_tag "#", :id => "choices" do %>
      <p>
        <%= radio_button_tag :choice, "with" %>
        <%= label_tag "choice_with", "..." %>
      </p>
      <p>
        <%= radio_button_tag :choice, "without" %>
        <%= label_tag "choice_without", "..." %>
      </p>
    <% end %> …
Run Code Online (Sandbox Code Playgroud)

ruby templates ruby-on-rails internationalization

6
推荐指数
1
解决办法
6391
查看次数

在应用程序布局中呈现部分问题(Rails)

这是application.html.erb文件中的调用:

<%= render :partial => 'tasks/_new' %>
Run Code Online (Sandbox Code Playgroud)

这是部分渲染(_new.html.erb):

<% form_for @task do |f| -%>
  <%= f.text_field :body %>
  <%= submit_tag "Submit" %>
<% end -%>
Run Code Online (Sandbox Code Playgroud)

这是'tasks'控制器中的方法:

def new
  @task = Task.new

  respond_to do |format|
    format.html # new.html.erb
    format.xml  { render :xml => @task }
  end
end
Run Code Online (Sandbox Code Playgroud)

这是我一直得到的错误消息:

Missing template tasks/__new.erb in view path app/views
Run Code Online (Sandbox Code Playgroud)

它说错误在这一行:

<%= link_to "tasks", tasks_path %> <%= render :partial => 'tasks/_new' %>
Run Code Online (Sandbox Code Playgroud)

该文件位于正确的目录中.奇怪的是_文件名中有一个额外的错误.当我放弃并重命名部分时__new.erb,这是我得到的错误:

Called id for nil, which …
Run Code Online (Sandbox Code Playgroud)

forms ruby-on-rails

6
推荐指数
1
解决办法
7408
查看次数

Rails:引用该对象所属的模型

这可能是一个愚蠢的问题,但我似乎无法找到一个好的答案.我想知道引用一个对象所属模型的最佳方法.

例如:

class User < ActiveRecord::Base
  has_many :posts
end

class Post < ActiveRecord::Base
  belongs_to :users
end
Run Code Online (Sandbox Code Playgroud)

所以,为了获得用户的帖子,我可以使用user.posts,但是为了获得帖子的用户,我不能这样做:post.user

如果我向Post模型添加"用户"方法,它可以工作,但它似乎不是最好的方法.

class Post < ActiveRecord::Base
  belongs_to :users

  def user
    User.find(self.user_id)
  end
end
Run Code Online (Sandbox Code Playgroud)

如果你看这篇博客文章http://www.fortytwo.gr/blog/18/9-Essential-Rails-Tips作为例子,你可以看到作者使用post.user.username,这不起作用开箱即用以及:include => [:user],即使使用Post模型中的"user"方法也不起作用.

我知道这很简陋,所以感谢你的耐心等待.我只是想知道实现这种关系的最佳方法.

我的主要目标是使用嵌套包含来编写"查找",它会像这样引用给用户:

post = Post.find(:all,:include => [:user])

当我尝试这个时,我得到"ActiveRecord :: ConfigurationError:未找到名为'user'的关联;也许你拼错了它?"

非常感谢.

model ruby-on-rails include relationship

6
推荐指数
1
解决办法
2604
查看次数

如果我使用:class_name属性到has_one,我应该在迁移中添加什么?

我在我的Rails应用程序中有一个模型,它使用以下:class_name属性has_one:

class Foo < ActiveRecord:Base
  has_one :main_bar, :class_name => "Bar"

  # ...
end
Run Code Online (Sandbox Code Playgroud)

我现在有点不确定该课程的迁移内容.我可以使用推荐信吗?Rails会将什么作为列名寻找:main_bar?我可以这样做吗?

class CreateFoos < ActiveRecord::Migration
  def self.up
    create_table :foos do |t|
      t.references :main_bar
    end
  end

  def self.down
    drop_table :foos
  end
end
Run Code Online (Sandbox Code Playgroud)

谢谢!

migration ruby-on-rails reference has-one

6
推荐指数
1
解决办法
3521
查看次数

如何在rails应用程序中发送动态生成的文件

我正在尝试在rails应用程序中提供动态生成的文件,因此当用户单击特定链接时,将生成文件并使用send_data将其发送到客户端.

该文件不打算重复使用:是一个简短的文本文件,重新生成应该非常便宜,因为它不会被大量删除; 但如果有必要或方便我可以将它存储在数据库中,所以只生成一次.

首先,我想在内存中生成文件,并将其发送到控制器中.我试图存档这样的东西:

def DownloadsController < ApplicationController
  def project_file
    project = Project.find(params[:id])
    send_data project.generate_really_simply_text_file_report
  end
end
Run Code Online (Sandbox Code Playgroud)

但我不知道如何在内存中生成流,因此在文件系统中不会创建任何文件.

另一种选择是在rails app tmp目录中生成带有随机名称的文件并从中发送,但是文件将保留在那里,这是我不希望发生的事情.

编辑:如果我没有弄错,send_file会阻止请求直到文件被发送,所以它可以工作......

还有其他建议或意见吗?

提前致谢

ruby-on-rails file dynamic-data

6
推荐指数
1
解决办法
8564
查看次数

新电脑,git pull origin要求输入密码

在我的新电脑上,我设置了git和我的putty.exe和ssh键等等.

所以我做了一个:

git pull origin
Run Code Online (Sandbox Code Playgroud)

然后在命令提示符下,我要求输入密码.

我不知道它想要什么密码,然后它在第一次密码尝试失败后也会询问我的服务器密码.

它要求:

blahblah@serveradmin.com password:
Run Code Online (Sandbox Code Playgroud)

到底是怎么回事?

(我的git rep托管在共享的unix isp上)

我已经设置了pageant来使用我的私钥,它给了我一个弹出框来输入我的密码.这就是它在我的旧电脑上运行的方式,然后当我打开git-bash并做一个'git pull origin'时它工作正常而不问我什么.

更新II

那么让我总结一下这里发生的事情:

我在我的办公室电脑(windows7)(桌面)上有完全相同的设置,它工作正常,没有问我任何问题.我使用git做的所有b4都运行一个.bat文件来加载pageant.exe:

C:\putty\pageant.exe "E:\code\pg_pk.ppk"
Run Code Online (Sandbox Code Playgroud)

然后做一个git pull origin工作正常,不要求我输入任何密码.

我的笔记本电脑上也有这个,它就像我的办公室计算机一样直到我安装了Windows 7.现在,即使pageant.exe正在运行,它也会要求我输入密码(我可以在任务栏中看到它,并且密钥已加载).

所以今天我抓住了.bat文件和整个/ putty文件夹并把它放在我的笔记本电脑上,仍然无法正常工作,当我输入时它要求我输入密码: git pull origin

(我在两台计算机上运行相同版本的git)

真的很困惑,它会是什么?

windows git

6
推荐指数
1
解决办法
4620
查看次数

未初始化的常量ActionDispatch :: Routing :: Routes(NameError)

我正在关注clickatell教程,我的代码如下所示.但是我得到了错误

uninitialized constant ActionDispatch::Routing::Routes (NameError)
from /Library/Ruby/Gems/1.8/gems/actionpack-3.1.1/lib/action_dispatch/routing/route_set.rb:258:in `instance_exec'
    from /Library/Ruby/Gems/1.8/gems/actionpack-3.1.1/lib/action_dispatch/routing/route_set.rb:258:in `eval_block'
    from /Library/Ruby/Gems/1.8/gems/actionpack-3.1.1/lib/action_dispatch/routing/route_set.rb:235:in `draw'
    from /Users/user1/Desktop/rails_projects/clickatellsms/config/routes.rb:1
    from /Library/Ruby/Gems/1.8/gems/railties-3.1.1/lib/rails/application/routes_reloader.rb:29:in `load_paths'
    from /Library/Ruby/Gems/1.8/gems/railties-3.1.1/lib/rails/application/routes_reloader.rb:29:in `each'
    from /Library/Ruby/Gems/1.8/gems/railties-3.1.1/lib/rails/application/routes_reloader.rb:29:in `load_paths'
    from /Library/Ruby/Gems/1.8/gems/railties-3.1.1/lib/rails/application/routes_reloader.rb:13:in `reload!'
    from /Library/Ruby/Gems/1.8/gems/railties-3.1.1/lib/rails/application/routes_reloader.rb:7:in `initialize'
    from /Library/Ruby/Gems/1.8/gems/activesupport-3.1.1/lib/active_support/file_update_checker.rb:32:in `call'
    from /Library/Ruby/Gems/1.8/gems/activesupport-3.1.1/lib/active_support/file_update_checker.rb:32:in `execute_if_updated'
    from /Library/Ruby/Gems/1.8/gems/railties-3.1.1/lib/rails/application/finisher.rb:63
    from /Library/Ruby/Gems/1.8/gems/railties-3.1.1/lib/rails/application/finisher.rb:64:in `call'
    from /Library/Ruby/Gems/1.8/gems/railties-3.1.1/lib/rails/application/finisher.rb:64
    from /Library/Ruby/Gems/1.8/gems/railties-3.1.1/lib/rails/initializable.rb:30:in `instance_exec'
    from /Library/Ruby/Gems/1.8/gems/railties-3.1.1/lib/rails/initializable.rb:30:in `run'
    from /Library/Ruby/Gems/1.8/gems/railties-3.1.1/lib/rails/initializable.rb:55:in `run_initializers'
    from /Library/Ruby/Gems/1.8/gems/railties-3.1.1/lib/rails/initializable.rb:54:in `each'
    from /Library/Ruby/Gems/1.8/gems/railties-3.1.1/lib/rails/initializable.rb:54:in `run_initializers'
    from /Library/Ruby/Gems/1.8/gems/railties-3.1.1/lib/rails/application.rb:96:in `initialize!'
    from /Library/Ruby/Gems/1.8/gems/railties-3.1.1/lib/rails/railtie/configurable.rb:30:in `send'
    from /Library/Ruby/Gems/1.8/gems/railties-3.1.1/lib/rails/railtie/configurable.rb:30:in `method_missing'
    from /Users/user1/Desktop/rails_projects/clickatellsms/config/environment.rb:5
    from /Users/user1/Desktop/rails_projects/clickatellsms/config.ru:4:in `require'
    from /Users/user1/Desktop/rails_projects/clickatellsms/config.ru:4
    from /Library/Ruby/Gems/1.8/gems/rack-1.3.4/lib/rack/builder.rb:51:in `instance_eval'
    from /Library/Ruby/Gems/1.8/gems/rack-1.3.4/lib/rack/builder.rb:51:in …
Run Code Online (Sandbox Code Playgroud)

ruby sms ruby-on-rails clickatell ruby-on-rails-3

6
推荐指数
1
解决办法
9119
查看次数

Ruby to_s转换为二进制(参数中的Splat运算符)

如果我运行以下代码,前两行将返回我所期望的.但是,第三个返回2的二进制表示.

2.to_s      # => "2"
2.to_s * 2  # => "22"
2.to_s *2   # => "10" 
Run Code Online (Sandbox Code Playgroud)

我知道在调用时传入2 to_s会将我的输出转换为二进制,但为什么to_s忽略*第三种情况呢?如果这有任何区别,我正在运行Ruby 1.9.2.

ruby splat ruby-1.9.2

6
推荐指数
1
解决办法
1728
查看次数

什么时候需要在rails Gemfile中使用require?

在我的gemfile中,我有类似的东西:

gem 'net-sftp', '2.1.1', :require => 'net/sftp'
gem 'backup', '3.0.27'
gem 'watu_table_builder', :require => 'table_builder'
gem 'browser', '0.1.6'
Run Code Online (Sandbox Code Playgroud)

在Gemfile中你需要一个要求吗?我也找到了类似的东西:require => false.救命?

ruby ruby-on-rails bundler gemfile

6
推荐指数
1
解决办法
1308
查看次数

如何在一组工作人员完成时执行Sidekiq回调

假设我有一个Sidekiq任务,可以将产品处理到我的数据库.每个产品都按商店分组,因此我的代码的过于简化的例子将是这样的......

stores.each do |store|
  store.products.each do |product|
    ProductWorker.perform_async(product.id)
  end
end
Run Code Online (Sandbox Code Playgroud)

当一家商店的所有产品都运行时.我想last_updated用当前时间更新商店列.但只有当该商店的最后一个任务运行时.我怎样才能做到这一点?

ruby-on-rails sidekiq

6
推荐指数
2
解决办法
4948
查看次数