标签: ruby-on-rails

在rails控制台中使用html_escape等辅助方法

我试图在我的视图中看到我的变量编码出了什么问题.所以我启动了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-on-rails html-escape

10
推荐指数
2
解决办法
5074
查看次数

如何在Rails中的VIews模板中创建和使用变量?

我仍然是ruby和rails的新手,并且正在寻找创建变量,因此我可以在视图模板中反复使用它.例如,我现在的代码是

<title>Home Page</title>
<h3>Welcome to my Home Page</h3>
Run Code Online (Sandbox Code Playgroud)

现在我想把这个"主页"变成变量或符号,这样我就可以使用那个变量/符号,而不是一遍又一遍地输入字符串,怎么做呢?

谢谢

ruby ruby-on-rails

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

在视图中嵌入实时Rails控制台

最近,我一直在使用better_errors gem,我发现实时shell功能(基本上是你视图中嵌入的Rails控制台)非常有用.我希望能够访问这种可用于调试/诊断目的的实时shell,即使我没有错误.这将是一个非常好的嵌入我的应用程序控制器和限制管理员访问,以便我可以在登台或prod服务器环境中使用它.

有没有其他类似的工具,或者也许是从better_errors中删除实时shell并将其嵌入我的视图中的方法?

ruby-on-rails

10
推荐指数
1
解决办法
1413
查看次数

Rails production.log文件为空

我正在使用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是空的.那为什么会这样?

ruby-on-rails

10
推荐指数
1
解决办法
9209
查看次数

使用capybara,phantomjs和rails在子域上测试javascript

这很有效.主要的本质是我必须在登录表单中设置Capybara.server_portCapybara.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 = …

subdomain ruby-on-rails capybara phantomjs

10
推荐指数
1
解决办法
4027
查看次数

自动刷新<div>而无需重新加载整个页面

我正在尝试更新"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)

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

10
推荐指数
1
解决办法
9007
查看次数

jquery-ui可排序获取错误 - PUT 501(未实现)

我有一个带有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)

apache jquery jquery-ui ruby-on-rails

10
推荐指数
1
解决办法
1203
查看次数

从一个有很多通过关联获得第一个关联

我正在尝试将每个播放列表的第一首歌加入到一系列播放列表中,并且我很难找到有效的解决方案.

我有以下型号:

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)的名字.

ruby join ruby-on-rails associations

10
推荐指数
1
解决办法
4953
查看次数

使用Rails 3在Chrome中使用Google Analytics MIME类型问题

我正在将GA添加到Rails 3应用程序中,当然这通常非常简单.我添加了GA JS片段,它正好渲染.一切都在Safari中完美运行.但是,在Chrome中,它给了我一个控制台错误:资源被解释为脚本但是使用MIME类型text/html传输:"about:blank",指向加载ga.js文件的JS行:s.parentNode.insertBefore(加油站).我调查过的一些事情:

  • 我使用JS代码段创建了一个计划HTML页面,它在Chrome中加载Rails之外没有错误.
  • 放入/ public时,相同的HTML页面会出现上述错误.
  • 根据Firebug,在/ public中从Safari加载的相同HTML页面不会出现任何错误.
  • 我在Chrome中尝试了GA Debug扩展,但它保持沉默,因为ga.js没有加载.

查看Chrome中的开发者控制台,我看到" http://www.google-analytics.com/ga.js " 请求似乎处于"待处理"状态,并且似乎重定向到"about:blank"由http://www.google-analytics.com/ga.js发起,这没什么意义.

所以这似乎与Rails有关(因为代码片段在Rails之外的HTML中工作),并且不会影响Safari,但除此之外我感到难过.希望我一直盯着它错了,其他人会向我指出明显的......?有没有人遇到过这个?任何想法将非常感谢.

google-analytics google-chrome ruby-on-rails

10
推荐指数
1
解决办法
2156
查看次数

Ransack,搜索多个列,一个字段,轨道3

我是Ruby on Rails的新手,我正在创建我的第一个网站.我有3列的用户模型:firstname,lastnameemail.我使用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中这样做 - >在模型中做这个 - >在视图中做这个 - …

search ruby-on-rails ransack

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