我试图在我的视图中看到我的变量编码出了什么问题.所以我启动了rails控制台并试着这样做
$ rails console
Loading development environment (Rails 3.2.11)
irb(main):001:0> html_escape({:a=>1, :b=>"my str"})
NoMethodError: undefined method `html_escape' for main:Object
Run Code Online (Sandbox Code Playgroud)
如何在rails控制台中使用h或html_escape?
我仍然是ruby和rails的新手,并且正在寻找创建变量,因此我可以在视图模板中反复使用它.例如,我现在的代码是
<title>Home Page</title>
<h3>Welcome to my Home Page</h3>
Run Code Online (Sandbox Code Playgroud)
现在我想把这个"主页"变成变量或符号,这样我就可以使用那个变量/符号,而不是一遍又一遍地输入字符串,怎么做呢?
谢谢
最近,我一直在使用better_errors gem,我发现实时shell功能(基本上是你视图中嵌入的Rails控制台)非常有用.我希望能够访问这种可用于调试/诊断目的的实时shell,即使我没有错误.这将是一个非常好的嵌入我的应用程序控制器和限制管理员访问,以便我可以在登台或prod服务器环境中使用它.
有没有其他类似的工具,或者也许是从better_errors中删除实时shell并将其嵌入我的视图中的方法?
我正在使用Rails 2.3.13而在我的中environments/production.rb,我有:
config.log_level = :info
RAILS_DEFAULT_LOGGER = SyslogLogger.new('mysite-platform-production')
Run Code Online (Sandbox Code Playgroud)
然而,我log/production.log是空的.那为什么会这样?
解
这很有效.主要的本质是我必须在登录表单中设置Capybara.server_port和Capybara.app_host手动登录.Capybara.app_host除非在变量中声明,否则无法使用动态子域进行设置.所有网址都必须硬编码.
require 'spec_helper'
feature 'customer' do
let(:user) {FactoryGirl.create(:user)}
let(:firm) {user.firm}
let(:customers) {"http://#{firm.subdomain}.lvh.me:31234/customers"}
let(:root_url) {"http://#{firm.subdomain}.lvh.me:31234/"}
before(:all) do
Capybara.server_port = 31234
sub = firm.subdomain
Capybara.app_host = root_url
end
def sign_in_on_js
visit root_url
fill_in "Email", :with => user.email
fill_in "Password", :with => "password"
click_button "Sign in"
page.should have_content("Signed in successfully.")
end
scenario "make new", js: true do
sign_in_on_js
visit customers
page.should have_content("Add new customer")
find("#dialog_customer").click
page.should have_content("Create new customer")
end
end
Run Code Online (Sandbox Code Playgroud)
原始问题 我在rails中制作多租户应用程序.会有很多javascript.但是,我无法让测试工作.
当没有运行时,:js = …
我正在尝试更新"mydiv"的内容而不刷新整个索引页面.@mydata由mycontroller提供.我需要每n秒重新计算一次并将其传递给"mydiv"
使用"link_to"它有效!
index.html.erb
<%=
link_to('refresh', '/mycontroller/index', :remote => true)
%>
<div id="mydiv">
<%=
@mydata
%>
</div>
Run Code Online (Sandbox Code Playgroud)
index.js.erb的
$('#mydiv').html('<%= escape_javascript(@mydata) %>')
Run Code Online (Sandbox Code Playgroud)
现在我需要每隔n秒自动刷新"mydiv"的内容(所以不要点击链接).我尝试过以下解决方案:
但没有运气.
在我的application.js中我写了这个:
function executeQuery() {
$.ajax({
//url: '/index',
success: function(data) {
$('#mydiv').html(data)
}
});
setTimeout(executeQuery, 500);
}
$(document).ready(function() {
setTimeout(executeQuery, 500);
});
Run Code Online (Sandbox Code Playgroud)
对于谁面临同样的问题,我通过更换来解决它
$('#mydiv').html(data)
Run Code Online (Sandbox Code Playgroud)
同
$('#mydiv').load('/mycontroller/index #mydiv')
Run Code Online (Sandbox Code Playgroud) 我有一个带有jquery-ui可排序列表的Rails应用程序.当用户从一个列表拖动到另一个列表时,wostatus_id字段会更新.因此,它在jquery Ajax更新上失败了.
这在localhost和Heroku上工作正常.但是,我正在将应用程序移动到Bitnami Virtual Server + Rails实现.我不知道它是否相关,但我在新服务器上使用node.js.
在这台新服务器上,我在浏览器控制台上收到此错误:
PUT http://ndeavor.ameipro.com/workorders/2 501 (Not Implemented)
Run Code Online (Sandbox Code Playgroud)

这是咖啡脚本:
$("#sort1, #sort2, #sort3, #sort4, #sort5, #sort6, #sort7").sortable
connectWith: ".connectedSortable"
cursor: "move"
update: ->
$.post($(this).data('update-url'), $(this).sortable('serialize'))
receive: (event, ui) ->
str_id = $(ui.item).attr('id')
woid = str_id.split('_')[1]
$.update "/workorders/" + woid,
workorder:
wostatus_id: $(this).data('wostatus-id')
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助!
UPDATE1
当我使用fullcalendar-rails月视图将事件从一天拖到另一天时,我得到了同样的错误.
UDPATE2
我发现这个"修复501错误代码客户端应该指定一个有效的请求类型.即使之后如果Web服务器响应不正确,那么只需要升级Web服务器来解决问题."
我确定请求是正常的 - 相同的代码已经在localhost和Heroku上运行了好几个月.所以,它必须与我正在使用的新虚拟服务器有关.
新服务器是Bitnami Rails堆栈.它安装了node.js. 我正在运行Apache,Passenger和PG.
我如何升级服务器来解决问题?
UPDATE3
这个coffeescript得到了同样的回应:
updateEvent = (the_event) ->
$.update "/events/" + the_event.id,
event:
title: the_event.title,
starts_at: "" + the_event.start,
ends_at: "" + the_event.end,
description: …Run Code Online (Sandbox Code Playgroud) 我正在尝试将每个播放列表的第一首歌加入到一系列播放列表中,并且我很难找到有效的解决方案.
我有以下型号:
class Playlist < ActiveRecord::Base
belongs_to :user
has_many :playlist_songs
has_many :songs, :through => :playlist_songs
end
class PlaylistSong < ActiveRecord::Base
belongs_to :playlist
belongs_to :song
end
class Song < ActiveRecord::Base
has_many :playlist_songs
has_many :playlists, :through => :playlist_songs
end
Run Code Online (Sandbox Code Playgroud)
我想得到这个:
playlist_name | song_name
----------------------------
chill | baby
fun | bffs
Run Code Online (Sandbox Code Playgroud)
我很难找到通过加入来实现这一目标的有效方法.
更新****
Shane Andrade带领我朝着正确的方向前进,但我仍然无法得到我想要的东西.
这是我能够得到的:
playlists = Playlist.where('id in (1,2,3)')
playlists.joins(:playlist_songs)
.group('playlists.id')
.select('MIN(songs.id) as song_id, playlists.name as playlist_name')
Run Code Online (Sandbox Code Playgroud)
这给了我:
playlist_name | song_id
---------------------------
chill | 1
Run Code Online (Sandbox Code Playgroud)
这很接近,但我需要第一首歌(根据id)的名字.
我正在将GA添加到Rails 3应用程序中,当然这通常非常简单.我添加了GA JS片段,它正好渲染.一切都在Safari中完美运行.但是,在Chrome中,它给了我一个控制台错误:资源被解释为脚本但是使用MIME类型text/html传输:"about:blank",指向加载ga.js文件的JS行:s.parentNode.insertBefore(加油站).我调查过的一些事情:
查看Chrome中的开发者控制台,我看到" http://www.google-analytics.com/ga.js " 请求似乎处于"待处理"状态,并且似乎重定向到"about:blank"由http://www.google-analytics.com/ga.js发起,这没什么意义.
所以这似乎与Rails有关(因为代码片段在Rails之外的HTML中工作),并且不会影响Safari,但除此之外我感到难过.希望我一直盯着它错了,其他人会向我指出明显的......?有没有人遇到过这个?任何想法将非常感谢.
我是Ruby on Rails的新手,我正在创建我的第一个网站.我有3列的用户模型:firstname,lastname和email.我使用ransack制作搜索引擎,我希望有一个搜索字段,它将遍历每一列并显示结果.
我创建了一个user_controller.rb,如下所示:
@q = User.search(params[:q])
@users = @q.result(:distinct => true)
Run Code Online (Sandbox Code Playgroud)
我的User\index.html.erb看起来像这样:
<%= search_form_for @search do |f| %>
<div class="field">
<%= f.label :firstname_cont , "Firstname" %>
<%= f.text_field :firstname_cont %>
<%= f.label :lastname_cont , "Lastname" %>
<%= f.text_field :lastname_cont %>
<%= f.label :email_cont , "Email" %>
<%= f.text_field :email_cont %>
</div>
<div class="actions"><%= f.submit "Search" %></div>
<% end %>
Run Code Online (Sandbox Code Playgroud)
给了我3个搜索字段,但我只想要一个通过名字,姓氏和电子邮件.
编辑1:在测试了一些之后,我发现搜索字段不能同时处理名字和姓氏,也不能处理任何空格.我已经读过可以像这样制作一个helper_method: 用Ransack搜索多个字段
当我得到搜索结果时,我会被扔进我的模型索引等:user/index.我在哪里可以改变这个?
但是在视图中如何使用它没有任何意义.为什么这么辛苦,这就是你所做的:在Controller中这样做 - >在模型中做这个 - >在视图中做这个 - …
ruby-on-rails ×10
ruby ×2
ajax ×1
apache ×1
associations ×1
capybara ×1
html-escape ×1
join ×1
jquery ×1
jquery-ui ×1
phantomjs ×1
ransack ×1
search ×1
subdomain ×1