小编MrR*_*uru的帖子

Rails - 更新单个属性:链接自定义操作或隐藏字段的表单?

假设我有一个User模型,其facebook_uid字段对应于用户的facebook id.

我想允许用户取消他的Facebook帐户的链接.这样做,我需要将此属性设置为nil.

我目前看到了两种方法

第一种方式:创建自定义操作并链接到它

# app/controllers/users_controller.rb
def unlink_facebook_account
  @user = User.find params[:id]
  # Authorization checks go here
  @user.facebook_uid = nil
  @user.save
  # Redirection go here
end

# config/routes.rb
ressources :users do
  get 'unlink_fb', :on => :member, :as => unlink_fb
end 

# in a view
= link_to "Unlink your facebook account", unlink_fb_path(@user)
Run Code Online (Sandbox Code Playgroud)

第二种方式:为现有更新操作创建表单

# app/views/user/_unlink_fb_form.html.haml
= form_for @user, :method => "post" do |f|
  = f.hidden_field :facebook_uid, :value => nil
  = f.submit "Unlink Facebook account"
Run Code Online (Sandbox Code Playgroud)

我不是两种方式的忠实粉丝.

  • 在第一个中,我必须为更新控制器已经可以执行的操作添加新操作.

  • 在第二个中,我无法在不自定义更新操作的情况下将facebook_uid设置为nil,并且在没有添加一些javascript的情况下我没有链接而不是按钮.

不过,对于这种情况,您会推荐哪种最佳和最优雅的解决方案?我错过了第三种选择吗?

解决方案(Abdullah Jibaly建议) …

forms ruby-on-rails crud hidden-field

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

Rails - 获取没有GET参数的当前URL

request.url返回给我:http:// localhost:3000/page?foo = bar.

有没有我可以调用的方法来获取http:// localhost:3000/page,还是我必须解析字符串以去除get参数?

url ruby-on-rails

31
推荐指数
3
解决办法
3万
查看次数

在javascript应用程序中处理特定于环境的配置

上下文:使用yeoman构建的单页主干应用程序

我想要一种方法让一些应用程序参数取决于我当前的环境(dev vs production).

现在我使用两个单独的配置文件,在部署grunt:usemin任务时,我将dev one切换到prod one:

// index.html
<!-- build:js scripts/config.prod.js -->
<script src="scripts/config.dev.js"></script>
<!-- endbuild -->    

// config.dev.js
window.config = {
    api_host: 'localhost:9393',
    api_key:  'dev_api_key'
}

// config.prod.js
window.config = {
    api_host = 'api.host.tld',
    api_key =  'prod_api_key'
}
Run Code Online (Sandbox Code Playgroud)

这个解决方案有效,但很臭,不允许任何其他环境,而不是生产和开发.我有什么选择?

javascript gruntjs yeoman

7
推荐指数
1
解决办法
1478
查看次数

Ansible:定义命令何时不必运行(从源代码构建ruby)

以下是我的剧本中负责从源代码下载和构建ruby的部分:

  vars:
    ruby_version: '2.0.0-p247'
    ruby_url: 'ftp://ftp.ruby-lang.org//pub/ruby/2.0/ruby-{{ ruby_version }}.tar.gz'

  tasks: 

  - name: Ensure ruby dependencies are installed
    apt: pkg=$item state=installed update-cache=yes
    sudo: yes
    with_items:
      - build-essential
      - git-core
      - libreadline6-dev
      - libyaml-dev
      - libsqlite3-dev
      - sqlite3
      - libgdbm-dev
      - libncurses5-dev
      - libtool
      - bison
      - libffi-dev
      - libdigest-hmac-perl
      - unzip
      - zlib1g
      - zlib1g-dev

  - name: Ensure the ruby source is downloaded
    get_url: url=$ruby_url dest=/home/vagrant/ruby-{{ ruby_version }}.tar

  - name: Ensure the ruby source is extracted
    command: tar -zxf /home/vagrant/ruby-$ruby_version.tar creates=/home/vagrant/ruby-{{ ruby_version …
Run Code Online (Sandbox Code Playgroud)

ruby ansible

7
推荐指数
1
解决办法
4951
查看次数

Rails - has_one 关系:关联和非关联对象的范围

我有这样的关系:一个用户可以拥有零只或一只狗,但狗必须属于某人。

# dog.rb
class Dog < ActiveRecord::Base
  belongs_to :user
end

# user.rb
class User < ActiveRecord::Base
  has_one :dog
end
Run Code Online (Sandbox Code Playgroud)

我想定义以下范围:

User.with_a_dog
User.without_a_dog
Run Code Online (Sandbox Code Playgroud)

我可以对第一种情况执行此操作,因为在 Rails 中默认连接是 INNER JOIN :

scope :with_a_dog, :joins(:dog)
Run Code Online (Sandbox Code Playgroud)

1/ 这个解决方案对于第一个范围足够好吗?

2/ 第二个你会做什么?

3/(有些相关)有更好的方法吗?:

# user.rb
def has_a_dog?
  !self.dog.nil?
end
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助!

sql activerecord ruby-on-rails

5
推荐指数
2
解决办法
3160
查看次数

将iex shell附加到正在运行的elixir应用程序

我有一个在heroku上运行的elixir(混合)应用程序

我在将远程iex shell附加到此应用程序时遇到问题

该应用程序通过以下命令启动:

web: MIX_ENV=prod elixir --sname server -S mix run --no-halt
Run Code Online (Sandbox Code Playgroud)

我在本地附加shell没有问题

MIX_ENV=prod elixir --sname server -S mix run --no-halt
iex --sname console --remsh server@mru2
Run Code Online (Sandbox Code Playgroud)

但是,在heroku上尝试时,我遇到了以下问题:

heroku run "iex --sname console --remsh server@41959264-bef2-4d2e-b5de-6dcf618efa44"
Running `iex --sname console --remsh server@41959264-bef2-4d2e-b5de-6dcf618efa44` attached to terminal... up, run.4421
Erlang/OTP 17 [erts-6.4] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false]

Could not contact remote node server@41959264-bef2-4d2e-b5de-6dcf618efa44, reason: :nodedown. Aborting...
Run Code Online (Sandbox Code Playgroud)

似乎启动的实例heroku run无法连接到运行服务器的实例.我试过强制执行一个常见的cookie,但无济于事.

我错过了什么?

elixir-mix heroku elixir

5
推荐指数
1
解决办法
2578
查看次数

存储稀疏矩阵的数据库

我有一个非常大且非常稀疏的矩阵,仅由 0 和 1 组成。然后我基本上处理(行列)对。我每行/列最多有 10k 对。

我的需求如下:

  • 并行插入(行-列)对

  • 快速检索整行或整列

  • 快速查询(行列)对的存在

  • 如果可能的话,一个 Ruby 客户端


是否有适用于此类约束的现有数据库?

如果没有,什么能让我获得最佳性能:

  • 一个 SQL 数据库,有一个这样的表:

row(indexed) | column(indexed) (但索引必须不断刷新)

  • 一个 NoSQL 键值存储,有两个这样的表:

row => columns ordered list

column => rows ordered list

(但将元素并行插入到列表中)

  • 别的东西

谢谢你的帮助!

ruby database sparse-matrix nosql

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

如何在运行时配置Ecto?

按照安装说明,我的文件中包含以下Ecto配置config/config.exs:

config :my_app, MyApp.Repo,
  adapter: Ecto.Adapters.Postgres,
  url: "postgresql://postgres@localhost/myrepo",
  size: 20
Run Code Online (Sandbox Code Playgroud)

如果我的理解是正确的,那么config.exs在编译时进行评估.

有没有办法在运行时执行此配置步骤?

这适用于将作为编译二进制文件(via exrm)分发的应用程序.最终用户应该能够通过标志或环境变量自定义数据库URL和池大小,而不是通过编辑sys.config

elixir ecto

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

Ruby OAuth gem存储库?

我找不到托管最新版oauth gem的存储库(v 0.4.7).

我有一个pelle/oauth github存储库,它有0.4.3的主机,并且链接到所谓的最新的oauth/oauth-ruby,它已经关闭了.

我错过了什么,或者现在这个存储库是否已经离开网格?

ruby gem open-source oauth repository

0
推荐指数
1
解决办法
479
查看次数