小编ste*_*och的帖子

Rails嵌套模型表单:验证外键的存在,除非用户创建新记录

有一个非常简单的rails应用程序,这是我的代码:

class Post < ActiveRecord::Base
  belongs_to :category
  attr_accessible :category_id, :category_attributes    
  accepts_nested_attributes_for :category, :reject_if => :all_blank
end

class Category < ActiveRecord::Base
  has_many :posts
end

#app/views/posts/_form.html.haml
= simple_form_for(@post) do |f|
  = f.association :category
  = f.simple_fields_for :category do |cat_f|
    = cat_f.input :name    
Run Code Online (Sandbox Code Playgroud)

因此,在创建新帖子时,我可以选择一个类别(从选择菜单中)或创建一个新类别(如果它不存在).

我想验证category_id是否存在,除非用户选择创建新类别

我猜是有某种类型的rails方法来解决这个问题 - 我知道我不能只是添加,validates :category_id, :presence => true因为这会导致表单提交失败,当用户决定创建一个新类别(并没有从中选择一个落下).

第二个问题: 我最近阅读了一个有用的rails教程,向您展示如何在显示类别选择菜单和新类别字段之间切换,以便在任何给定时间屏幕上只显示两个中的一个.任何人都有这样的链接?

ruby-on-rails

4
推荐指数
1
解决办法
2905
查看次数

“ng”在软件名称中使用时代表什么?

我见过很多,比如在bwm-ngaircrack-ng 中。有谁知道以这种方式使用时“ng”部分代表什么?

naming-conventions

4
推荐指数
1
解决办法
935
查看次数

如何安装边缘导轨?

如何安装最新的未发布的rails版本?即边缘导轨?已经遵循了一些建议,但似乎仍然有版本2.3.5 ...

ruby-on-rails

3
推荐指数
1
解决办法
1533
查看次数

有关ExtJS许可证的问题

假设我创建了一个使用ExtJS的CMS.

我想避免许可费,所以我在github上开源CMS.

现在让我们想象一下,我让你的朋友Dave成为一个使用我的CMS的网站.我花了三百个小时设计徽标和布局.我是否可以收取费用,我是否有义务开源Dave的网站,还是仅仅开源CMS?

我发现这个LPGL许可证有点令人困惑.跟我说戴夫.

licensing extjs

3
推荐指数
1
解决办法
1128
查看次数

rails 3将html标签打印到屏幕而不是渲染它们

我正在使用vhochstein的active_scaffold分支,它在rails 3上运行得非常好,除了一些小错误 - http://github.com/vhochstein/active_scaffold.

在rails 2.3中,以下代码禁用链接:

return "<a class='disabled'>#{text}</a>" unless authorized
Run Code Online (Sandbox Code Playgroud)

但是在Rails 3中,它会导致转出的html标签打印出来,如下图所示:

https://internet-websites.s3.amazonaws.com/image2886.png

如何使这个return语句的内容呈现它在rails 3中的应用方式?

上面的代码来自list_column_helpers.rbvendor/plugins/active_scaffold/helpers /中的文件

更新:

通过建议添加.html_safe到代码,Floatless修复此问题.

我已经发现还需要进行以下更改,因为有多个代码可以响应在active_Scaffold中禁用操作链接:

在/plugins/active_scaffold/frontends/default/views/_list_actions.html.erb更改:

<%= record.authorized_for?(:crud_type => etc etc etc -%>

By making it use "raw"

i.e. 

<%= raw record.authorized_for?(:crud_type => etc etc etc -%>
Run Code Online (Sandbox Code Playgroud)

无论如何,多亏了浮动,希望hochstein先生能够使用这些东西.

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

3
推荐指数
1
解决办法
3971
查看次数

我可以将命名范围附加到Rails中的链接吗?

我有一个事件模型,它有两个命名范围:

class Event < ActiveRecord::Base
  scope :future, lambda { where('events.date >= ?', Time.zone.now) }
  scope :past, lambda { where('events.date <= ?', Time.zone.now) }
end
Run Code Online (Sandbox Code Playgroud)

我通过创建两个新的控制器动作(名为"future"和"past")从我的控制器调用这些范围:

我的控制器:

class EventsController < InheritedResources::Base
  actions :index, :show, :future, :past

  has_scope :future
  has_scope :past

  def future
    index! { @events = Event.future }
  end

  def past
    index! { @events = Event.past }
  end
end
Run Code Online (Sandbox Code Playgroud)

我还有这些额外行动的观点和路线.

这很好用.我的应用程序执行我想要的操作,并且可以链接到我的侧边栏中的新操作,如下所示:

%li
  = link_to 'Events Home', events_path
%li
  = link_to 'Future Events', future_events_path
%li
  = link_to 'Past Events' past_events_path
Run Code Online (Sandbox Code Playgroud)

现在我对这个设置的问题是,虽然它工作得很好,但我不喜欢我必须为这些额外范围创建新的动作,视图和路由这一事实.我不认为我这样做是正确的.基本上我正在尝试过滤索引页面上的结果,但我必须创建新的操作,路由和视图来执行此操作.这看起来有点麻烦,我想知道是否有另一种方式.

如果我可以取消"未来"和"过去"控制器操作并且只是从视图中调用范围,那将是很好的: …

ruby-on-rails ruby-on-rails-3 has-scope

3
推荐指数
1
解决办法
3224
查看次数

RefineryCMS - 删除默认页面部分

我想删除RefineryCMS中每个页面上的side_body部分.

该指南建议您可以通过进入和更改设置来更改页面部分config/initializers/refinery/pages.rb:

所以我改变了:

config.default_parts = [“Body”, “Side Body”]
Run Code Online (Sandbox Code Playgroud)

至:

config.default_parts = [“Body”]
Run Code Online (Sandbox Code Playgroud)

我已经重新启动了我的服务器,但我的side_body部分仍然出现.可以移除side_body吗?

ruby-on-rails refinerycms

3
推荐指数
1
解决办法
1022
查看次数

设计,跳过确认,直到用户尝试做一些有意义的事情

我想让新用户注册并浏览我的网站,而无需确认他们的电子邮件地址,直到他们尝试做任何有意义的事情,例如创建新项目、上传视频或发表评论。

Devise 是否有任何钩子可以做这种事情?

ruby-on-rails devise devise-confirmable ruby-on-rails-4

3
推荐指数
1
解决办法
798
查看次数

在sed替换中使用$ HOSTNAME

我想在调用中使用我的Centos VM的$ HOSTNAME,sed如下所示:

sed -i 's/Apache 2 Test Page/$HOSTNAME Test Page/g' /var/www/error/noindex.html
Run Code Online (Sandbox Code Playgroud)

但是,这只是替换Apache 2 Test Page$HOSTNAME Test Page......我知道我可以做手工,但我有一个很好的理由为希望做这种方式.


FWIW,我实际上是在一个bash脚本中执行此操作,该脚本从Vagrantfile调用,后者又提供多个VM(每个都安装了Apache2),以便我可以测试HAProxy的负载平衡功能.所以我只想要一种简单的方法来区分我的3个Web服务器,而且我认为修改默认的Apache页面是最简单的方法.

unix linux bash sed hostname

3
推荐指数
1
解决办法
7996
查看次数

Rspec:期望模块接收方法

我有一个非常简单的模块:

module Foo
  def self.quux
    begin
      # stuff here
    ensure
      Baz.print_stuff
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

然后我有一个失败的简单测试:

describe Foo
  describe '.quux' do
    it "should print stuff" do
      Foo.quux
      expect(Baz).to receive(:print_stuff)
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

当我运行此命令时,我收到以下错误消息:

Failures:

1) Foo.quux should should print stuff
   Failure/Error: expect(Baz).to receive(:print_stuff)
     (Baz).print_stuff(any args)
         expected: 1 time with any arguments
         received: 0 times with any arguments
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我知道该print_stuff方法正在被调用。

unit-testing rspec ruby-on-rails

3
推荐指数
1
解决办法
2453
查看次数