小编ber*_*kes的帖子

强制使用构造函数

我想对某些结构提供一些业务规则保证。例如,anEmailAddress是有效的电子邮件,或者 aDateRange的 from 位于 from 之前,等等。因此,当传递这样的值时,可以保证遵守该结构的所有业务规则。

struct InvalidEmailAddress;
struct EmailAddress {
  value: String
}

impl EmailAddress {
  fn new(value: String) -> Result<Self, InvalidEmailAddress> {
    if value.contains("@") { // I know, this isn't any sort of validation. It's an example.
        Ok(Self { value })
    } else {
        Err(InvalidEmailAddress)
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

忽略 now 的new()行为是意外的(使用方法可能会更好build()),这会带来一个问题:当有人EmailAddress通过构造函数构建 an 时,它保证是“有效的”。但是当有人将其构造为普通结构时,它可能不是。

let guaranteed_valid = EmailAddress::new(String::from("hi@example.com")).unwrap();
let will_crash = EmailAddress::new(String::from("localhost")).unwrap()
let unknown_valid = EmailAddress { …
Run Code Online (Sandbox Code Playgroud)

rust

2
推荐指数
1
解决办法
659
查看次数

Ruby on Rails表单f.text_area包含额外的空格

我在Rails中有一个非常平均的形式,通过blog_kit

<% form_for(@blog_post, :html => { :multipart => true }) do |f| %>\
  ... other code
  <%= f.text_area :body %>
  <%= debug(@blog_post) %>
Run Code Online (Sandbox Code Playgroud)

在编辑博客文章时,正文突然包含额外的空格(标记为_以显示):

...sit amet eleifend diam imperdiet pharetra.
__ 
__## FOO?
__Morbi nec
Run Code Online (Sandbox Code Playgroud)

因为textarea是空间感知的,它将显示空格.在更新时,它们将添加到数据库中.

这些空间不在数据库中(在上面提到的错误更新之前).BlogPost.find(1)模型也不包含这些空格.

script/console » b = BlogPost.find(1)
» puts b.body
...sit amet eleifend diam imperdiet pharetra.

## FOO?
Morbi nec
Run Code Online (Sandbox Code Playgroud)

在获取数据库之后,但在以局部形式呈现之前,似乎某些逻辑会添加空格.候选人是:

  • BlueCloth.我有启用,但找不到它将挂钩到加载过程的地方,并在textarea中呈现之前更改主体
  • HAML._form.html.rb部分尚未(尚未)迁移到_form.haml,因此我假设haml远离此部分.但它可能是麻烦的一部分?

我不知道从哪里开始寻找,所以任何提示都会非常受欢迎.

ruby-on-rails erb form-helpers bluecloth

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

如何使用rspec-rails2测试视图页面(paginate)?

rails 3 rspec-rails 2

在控制器中:

def index   @users = User.paginate
  :page => params[:page],:per_pae => 5
end
Run Code Online (Sandbox Code Playgroud)

在视图中:

<h1>User list</h1> 
<% @users.each do |user| %>
  <p>
    <%= user.name %>
  </p>
<% end %>
<%= will_paginate @users %>
Run Code Online (Sandbox Code Playgroud)

现在我使用rspec-rails 2来测试视图.

require 'spec_helper'

describe "/users/index.html.erb" do   
  before(:each) do
    assign(:users, [
      stub_model(User),
      stub_model(User),
      stub_model(User,
      stub_model(User)
    ])
  end

  it "renders a list of contracts" do
    render
    rendered.should contain "User list"
  end
end
Run Code Online (Sandbox Code Playgroud)

现在我使用rspec通用来测试它.我得到:未定义的方法`total_pages'for#

如何存根分页或其他一些方法来修复它?

testing rspec ruby-on-rails

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

如何在电子邮件模板中使用应用程序帮助器方法

我在以下位置定义了一个助手ApplicationHelper

module ApplicationHelper
  def url_for_portal
    URI("https://example.com/")
  end
end
Run Code Online (Sandbox Code Playgroud)

并想在邮件模板中使用它,app/views/client_mailer/account_activation.md.erb但得到一个undefined method 'url_for_portal'

Activate your Example.com account by clicking on the link below:
[<%= url_for_portal %>](<%= url_for_portal %>)
Run Code Online (Sandbox Code Playgroud)

如何在邮件模板中编写和使用辅助方法?

actionmailer ruby-on-rails-4

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

在vim中,将Ruby hashrockets更改为name:value表示法的有效方法是什么?

将Ruby的hashrocket符号更改为vim中的name: 'value' 符号的最有效方法是什么?

一些例子:

{ 
  :id => site.id,
  :primary_domain => site.name,
  :wp_admin_url => site.wp_admin_url
}
{ 
  id: site.id,
  primary_domain: site.name,
  wp_admin_url: site.wp_admin_url
}


{ :id => site.id, :primary_domain => site.name }
{ id: site.id, primary_domain: site.name }


Site.find_by(:access_token => params[:access_token], :primary_domain => params[:primary_domain])
Site.find_by(access_token: params[:access_token], primary_domain:params[:primary_domain])
Run Code Online (Sandbox Code Playgroud)

你有一个宏吗?我的一些更有效的序列呢?使用搜索替换?我能提出的最有效率,非常手动,需要一些重复:

ft:xpldf> 转到第一个:,删除它并将其粘贴到单词后面,然后向前移动一个字符并删除该=>部分.需要对:name => value哈希中的每个部分重复这一过程.并且不能简单地运行N次,因为很可能:symbols需要保留一些,就像在上一个例子中一样.

你如何从Hashrocket表示法中快速改变?

ruby vim

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

如何确保Ruby中的字符串长度

在Ruby中确保字符串长度的正确方法是什么?该字符串是多字节(UTF8).输入的字符串可能太短,完全正确或太长.它需要分别填充,不需要和切片.

我可以通过两个步骤到达那里:

def ensure_length(str, length)
  str.ljust(length).slice(0, length)
end 
Run Code Online (Sandbox Code Playgroud)

这有一种方法吗?如果需要分两步,最好的顺序是:然后切片,反之亦然,为什么?

ruby

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

如何动态访问结构属性?

我是 Rust 初学者,想知道如何struct动态访问 a的字段:

use std::collections::HashMap;

struct User {
    email: String,
    name: String,
}

impl User {
    fn new(attributes: &HashMap<String,String>) -> User {
        let mut model = User {
            email: "",
            name: "",
        };

        for (attr_name,attr_value) in attributes {
            // assign value "attr_value" to attribute "attr_name"
            // no glue how to do this
            // in php would be: $model->{$attr_name} = $attr_value;
            model.*attr_name *= attr_value;
        }

        model;
    }
}

fn main() {
    
    let mut map: HashMap::new();
    map.insert("email",String::from("foo@bar.de"));
    map.insert("name",String::from("John doe")); …
Run Code Online (Sandbox Code Playgroud)

rust

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

搜索并替换为命令的结果

在 vim 中,我想搜索和替换文本。但我想用命令的输出替换它。

鉴于文本:

{ "_template": "foo" }
{ "_template": "foo" }
Run Code Online (Sandbox Code Playgroud)

我想搜索并替换它成为:

{ "_id": "239c55fd-538e-485f-8588-83d9735b6819" }
{ "_id": "2ae9f49f-244c-47b0-8f0f-c6c46e860af3" }
Run Code Online (Sandbox Code Playgroud)

后者是 unix/linux 命令的结果uuidgen

它看起来像s:/"_template": "foo"/"_id": "<uuidgen>"/,但我不确定在<uuidgen>. 命令 uuidgen 只是一个示例,但它将是一个不带参数且不需要传入任何标准输入的命令(例如wc左右)。

它需要为每次搜索/替换再次调用命令。

这对vim有可能吗?或者我应该更好地使用 sed 和/或 awk 吗?

vim

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

从当前文档标题中的<link rel = shortlink>中提取网址

给出以下HTML:

<html>
  <head>
    <link href="http://example.com/g/8c" rel="shortlink" />
  </head>
  <body></body>
</html>
Run Code Online (Sandbox Code Playgroud)

如何在link, rel=shortlinkjavascript中检索href =""的内容?我不知道头部中的这些项目是否可以在DOM中访问.

-tag可能包含更多的链接标签,资产如CSS.所述 -tag可以含有多于一个的链路shortlink(按照HTML5"规格"),在这种情况下,只选择第一个.

javascript dom

0
推荐指数
2
解决办法
1908
查看次数

什么是确定数组是否只有唯一条目的Ruby方法?

我想知道是否Array只包含唯一(不同)条目.

[1,2,3,2].what_goes_here? #=> false
[1,2,3,4].what_goes_here? #=> true
Run Code Online (Sandbox Code Playgroud)

我不想操纵原始数组,所以

uniq的!{| item | ...}→ary或nil ...如果未进行任何更改,则返回nil(即,未找到重复项).

似乎不是正确的解决方案.否则我可能会做[1,2,3,4].uniq!.nil?.

我更喜欢优雅,可读,而不是一个复杂但性能更好的解决方案.

ruby arrays

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

如何转换选项中的内部值?

我有一个Option包含一些 JSON 的。如果是Some,则必须转换内部 JSON,但如果是None,则必须保留None

这就是我目前实施的方式:

struct One;
struct Other;

impl One {
    pub fn convert(&self) -> Other {
        Other {}
    }
}

fn example(attr: Option<One>) -> Option<Other> {
    match attr {
        Some(attr) => Some(attr.convert()),
        None => None,
    }
}
Run Code Online (Sandbox Code Playgroud)

我是新来的锈和不完全获得时使用的复杂性matchif let或时使用的?运营商。

我的实现是 Rust 惯用的吗?对我来说似乎比较冗长,而且看起来像一个到处都会出现的模式,所以我可以想象这可以更简洁地处理;是这样吗?

optional rust rust-2018

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