可能重复:
Ruby中的含义是什么意思?
我正在从Ruby的Poignant Guide中学习Ruby ,在一些代码示例中,我遇到了似乎用于相同目的的双冒号和点的使用:
File::open( 'idea-' + idea_name + '.txt', 'w' ) do |f|
f << idea
end
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,双冒号用于访问类的open
方法File
.但是,后来我遇到了使用点来实现相同目的的代码:
require 'wordlist'
# Print each idea out with the words fixed
Dir['idea-*.txt'].each do |file_name|
idea = File.read( file_name )
code_words.each do |real, code|
idea.gsub!( code, real )
end
puts idea
end
Run Code Online (Sandbox Code Playgroud)
这次,使用点来访问类的read
方法File
.有什么区别:
File.read()
Run Code Online (Sandbox Code Playgroud)
和
File::open()
Run Code Online (Sandbox Code Playgroud) 我期待编写某些方法来处理字符串,以及在我的许多控制器中发生的其他任务.我知道在你的控制器中加入帮助器是不好的做法,所以我只是想知道,在控制器中使用应用程序范围的方法的最佳位置在哪里?
我意识到有些人会说将它们放入模型中,但你必须意识到并非所有的控制器都有相关的模型.任何和所有输入将不胜感激.
我正在尝试创建一个表单,在选择某些元素后向表单添加元素.例如,在用户选择国家/地区之后,我希望有一个ajax调用,其中找到与该国家/地区关联的所有区域/州,然后将其插入到表单中的select元素中.然后,一旦用户选择区域/状态,将发生相同的过程,并且将另一个元素添加到表单中以响应所选值.作为旁注,我想以不引人注目的方式做到这一点.到目前为止,我认为这一点:
<%= form_tag(find_school_path, :method=>'get', :class => 'form-horizontal', :id => 'find_by_country_form') do %>
<%= label_tag :country_selection, "Country" %>
<%= select_tag :country_selection, options_from_collection_for_select(@countries, :id, :name), :prompt => "Country" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
然后在该视图的javascript文件中,我在选择国家时处理ajax调用:
$('#country_selection').change(function(){
$.ajax({
url: "find/country_selection",
type: "GET",
data: {'country=' + $('#country_selection option:selected').value() },
})
});
Run Code Online (Sandbox Code Playgroud)
然后,在我的控制器里面,我上面的url:
路线有:
def country_selection
@country = Country.find(params[:country])
@regions = @country.regions
respond_to do |format|
format.js { }
end
end
Run Code Online (Sandbox Code Playgroud)
最后,在我的country_selection.js.erb文件中,我有:
$('#country_selection').after('<%= label_tag :region_selection, "State/Region" %><%= select_tag :region_selection, options_from_collection_for_select(@regions, :id, :name), :prompt => "State/Region" %>');
Run Code Online (Sandbox Code Playgroud)
我没有得到这个工作.我甚至不确定我是以正确的方式做到这一点.当我点击选择并更改选项时,页面上的任何内容都不会更改. …
我知道这可能是一个新手问题,但是可以从现有控制器上的命令行创建一个新动作(控制器和相关视图中的方法)吗?
例如,我已经有一个名为'Products'的控制器.我可以跑:
rails g controller products [new_action]
Run Code Online (Sandbox Code Playgroud)
然后rails会插入:
def [new_action]
end
Run Code Online (Sandbox Code Playgroud)
进入我的产品控制器并在views/products /目录中创建一个名为'[new_action] .html.erb'的新文件?我已经用谷歌搜索了这个,但没有回复令人满意的答案.此外,我会继续尝试它,但我对我当前的应用程序的开发很远,并且真的不想弄乱任何东西.
我对RoR很新,我希望将我的下一个应用程序部署到heroku.我希望我的开发和测试环境与我的生产环境相匹配,以实现最顺利的过渡.因此,我开始在我的系统上安装postgresql.这个过程令人沮丧,我感到困惑.我跟随无数的教程无济于事,似乎很多人都有相互矛盾的信息.这就是我所知道的:
有很多方法可以安装postgresql.常见的选项是macports,homebrew,fink,Postgresql.app或enterpriseDB.安装上一个之后,您必须创建rails应用程序并运行:
rails new <app_name> -d postgresql
Run Code Online (Sandbox Code Playgroud)
或运行标准'rails new'然后在gemfile中将'sqlite3'更改为'pg'.然后,如果我是正确的,你实际上必须通过这样做在命令行中创建自己的数据库:
$ psql
$ CREATE DATABASE your_database_name;
Run Code Online (Sandbox Code Playgroud)
然后,编辑您的database.yml以遵循以下内容:
development:
adapter: postgresql
encoding: unicode
database: <your_database_name>
host: localhost
pool: 5
username: <username>
password:
Run Code Online (Sandbox Code Playgroud)
一旦完成,一切都应该好.但是,我遇到了问题.我实际上使用上面的过程工作,但我很困惑它是如何运行的.在尝试使所有这些工作的几个小时内,我安装了macports,homebrew和postgresql.app.但是,每当我尝试与数据库进行交互(例如'rake db:migrate')而没有运行postgresql.app时,我会收到此错误:
could not connect to server: Connection refused
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
could not connect to …
Run Code Online (Sandbox Code Playgroud) 我正在创建一个应用程序,轮询服务器以进行特定更改.我使用setTimeout使用自调用函数.基本上这样的东西:
<script type="text/javascript">
someFunction();
function someFunction() {
$.getScript('/some_script');
setTimeout(someFunction, 100000);
}
</script>
Run Code Online (Sandbox Code Playgroud)
为了使这种轮询在服务器上不那么密集,我希望有一个更长的超时间隔; 也许在1分钟到2分钟的范围内.是否存在setTimeout的超时变得太长且不再正常工作的点?
我正在开发一个应用程序,允许用户发布到房间/页面,就像一个论坛或这里(stackoverflow).我已经构建了整个应用程序,但是,我有一个最后的障碍:如何处理更新用户的帖子.
我已经对这个主题做了很多研究,我相信Long Polling是要走的路,至少在我获得大量流量之前(如果发生这种情况,我会弄清楚如何实现websockets).这是因为Long Polling将更容易实现,它得到更广泛的支持,并且考虑到我正在部署到heroku,很容易快速升级我的服务器资源.无论如何,我想知道在用户交互和服务器负载方面长轮询的最佳实践是什么.
我应该自动在页面上放置帖子,还是创建一个警报系统,例如stackoverflow上的那个?
任何和所有输入将不胜感激.无论如何你认为我的逻辑错了,请告诉我!
我最近从 github 分叉了一个存储库,但是,当我尝试运行“捆绑安装”时,我得到以下错误输出:
Robert-Quinns-MacBook-Pro:~ robertquinn$ gem install therubyracer
Building native extensions. This could take a while...
ERROR: Error installing therubyracer:
ERROR: Failed to build gem native extension.
/Users/robertquinn/.rvm/rubies/ruby-1.9.3-p194/bin/ruby extconf.rb
creating Makefile
Compiling v8 for x64
Using python 2.5.4
Unable to find a compiler officially supported by v8.
It is recommended to use GCC v4.4 or higher
Using compiler: g++
Unable to find a compiler officially supported by v8.
It is recommended to use GCC v4.4 or higher
File "./gyp-mac-tool", line …
Run Code Online (Sandbox Code Playgroud) 在开发rails应用程序的时候,我在谷歌chrome检查元素控制台测试ajax链接,突然间我注意到12个同类错误:
我不知道这里发生了什么,但我的应用程序工作正常,无论如何.但是,当我在firefox中启动我的应用程序时,我的应用程序甚至没有加载.我停下来,弹出这个错误:
我甚至不知道还有什么要说的,因为我完全被难倒了.
我正在使用Rails第4版(Rails 3.2+)进行敏捷Web开发,我对button_to方法感到有些困惑.这本书以及我所做的所有其他谷歌搜索都说button_to使用了POST请求.但是,当我检查页面时,button_to似乎正在使用GET方法.
现在,我可能有这个错误,但我来自php背景和POST方法总是意味着数据被传递到服务器而没有url并通过阵列服务器端访问:
$_POST['form_item']
Run Code Online (Sandbox Code Playgroud)
此外,GET请求意味着通过URL传递数据:
someurl.com/somepage?DATA=data_value
Run Code Online (Sandbox Code Playgroud)
使用此button_to代码:
<%= button_to 'Add to Cart', line_items_path(product_id: product_id) %>
Run Code Online (Sandbox Code Playgroud)
这将成为表单输出:
<form action="/line_items?product_id=4" class="button_to" method="post">
<div>
<input type="submit" value="Add to Cart" />
<input name="authenticity_token" type="hidden" value="vGT1scGqasbQAMxYwofXHCM62MfSyM/pNty69Ep5t38=" />
</div>
</form>
Run Code Online (Sandbox Code Playgroud)
此表单上的操作似乎是通过URL传递数据(?product_id = 4).虽然我可以清楚地看到"method ='post'",但这不是一个使用GET吗?
在我看来,我正在测试是否存在某些记录.如果他们这样做,我会迭代它们并显示每一个.但是,如果这些记录不存在,我想要显示一条消息.这是我的观点中的代码:
<% if current_user.lineups %>
<% for lineup in current_user.lineups do %>
<li><%= link_to "#{lineup.course.cl} #{lineup.course.cn}", index_path %></li>
<% end %>
<% else %>
<li><%= link_to "You have no courses", index_path %></li>
<% end %>
Run Code Online (Sandbox Code Playgroud)
现在,当记录存在时,迭代工作正常.每当我创建正确的记录时,此代码都会非常有效,并为每个迭代的记录创建一个链接.但是,如果不存在任何记录,则不显示任何内容.'else'语句完全被忽略.我试图修改'如果'的标签,但无济于事.我试过了:
<% unless current_user.lineups.nil? %>
Run Code Online (Sandbox Code Playgroud)
以及:
<% if !( current_user.lineups.nil? ) %>
Run Code Online (Sandbox Code Playgroud)
我在这里结束了我的智慧.任何和所有输入将不胜感激.
我需要将两个实例变量传递给ajax请求用来更新用户显示的javascript文件.这就是我需要做的事情:
respond_to do |format|
if @post.save
format.js { @post @user_vote } # <-- right here
else
format.html { redirect_to :back, :alert => 'There was an error in removing the vote' }
end
end
Run Code Online (Sandbox Code Playgroud)
这是怎么做到的?
我正在开发一个rails应用程序,我试图在保存或创建属性之前对其进行标题化.我很确定我已经正确地完成了这个,但是,每当我尝试在我的rails控制台中创建一个新记录时,标题化都没有发生.这是我的型号代码:
class City < ActiveRecord::Base
attr_accessible :name, :region_id
belongs_to :region
before_save :tileize_name
before_create :tileize_name
def tileize_name
self.name.titleize
end
end
Run Code Online (Sandbox Code Playgroud)
当我在控制台中读取属性时,标题化方法有效.例如:
Region.find(4).name
=> "arizona"
Region.find(4).name.titleize
=> "Arizona"
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么吗?
ruby-on-rails-3 ×11
ruby-on-rails ×10
gem ×2
heroku ×2
ruby ×2
javascript ×1
jquery ×1
long-polling ×1