小编Sam*_*ern的帖子

Rails:更新模型属性而不调用回调

我有一个具有:credits属性的User模型.我想要一个简单的按钮,通过一个名为"add"的路由将5添加到用户的信用点,这样/ users/3/add会将5添加到用户id = 3的信用点.

def add
    @user = User.find(params[:id])
    @user.credits += 5
    redirect_to root_path
end
Run Code Online (Sandbox Code Playgroud)

这是我的控制器的相关部分.问题是,我不想调用@ user.save,因为我有一个before_save回调,它根据当前的UTC时间重新加密用户的密码.我只想简单地为属性添加5并避免回调,我从未想过这么简单的事情会如此困难.

编辑:

我将回调更改为:before_create,这是我的新控制器代码(相关部分):

  def add
    @user = User.find(params[:id])
    @user.add_credits(5)
    @user.save
    flash[:success] = "Credits added!"
    redirect_to root_path
  end
Run Code Online (Sandbox Code Playgroud)

这是我在模型中的代码:

 def add_credits(num)
    self.credits = num
 end
Run Code Online (Sandbox Code Playgroud)

编辑2:

好吧,这是一个验证问题,使"编辑"中的更改无法正常工作,但我仍然喜欢在没有回调的情况下更新原始问题的答案!

ruby attributes model ruby-on-rails callback

69
推荐指数
4
解决办法
5万
查看次数

如何在运行时从文件夹或JAR加载类?

我正在尝试创建一个Java工具,它将扫描Java应用程序的结构并提供一些有意义的信息.为此,我需要能够从项目位置(JAR/WAR或只是一个文件夹)扫描所有.class文件,并使用反射来阅读他们的方法.事实证明这几乎是不可能的.

我可以找到许多基于URLClassloader的解决方案,它允许我从目录/存档加载特定的类,但是没有一个允许我加载类而没有关于类名或包结构的任何信息.

编辑:我想我的说法很差.我的问题不是我无法获得所有的类文件,我可以通过递归等来做到这一点并正确定位它们.我的问题是为每个类文件获取一个Class对象.

java reflection load jar class

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

杰克逊 - 如何处理(反序列化)嵌套的JSON?

{
  vendors: [
    {
      vendor: {
        id: 367,
        name: "Kuhn-Pollich",
        company_id: 1,
      }
    },
    {
      vendor: {
        id: 374,
        name: "Sawayn-Hermann",
        company_id: 1,
      }
  }]
}
Run Code Online (Sandbox Code Playgroud)

我有一个Vendor对象,可以从单个"供应商"json中正确地反序列化,但我想将其反序列化为a Vendor[],我只是无法弄清楚如何让Jackson合作.有小费吗?

java serialization json jackson

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

使用根元素的Jackson JSON反序列化

我和杰克逊有一个问题,我觉得应该很容易解决,但这让我很伤心.

假设我有一个看起来像这样的java POJO类(假设Getters和Setters对我来说):

class User {
    private String name;
    private Integer age;
}
Run Code Online (Sandbox Code Playgroud)

我想将看起来像这样的JSON反序列化为User对象:

{
  "user":
    {
      "name":"Sam Smith",
      "age":1
  }
}
Run Code Online (Sandbox Code Playgroud)

杰克逊给了我一些问题,因为用户不是JSON中的第一级对象.我显然可以创建一个具有单个User对象的UserWrapper类,然后使用它进行反序列化,但我知道必须有一个更优雅的解决方案.

我该怎么做?

java json pojo jackson

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

正则表达式选择所有不在引号中的空格?

我不是很擅长RegEx,有人可以给我一个正则表达式(在Java中使用),它会选择不在两个引号之间的所有空格吗?我试图从字符串中删除所有这样的空格,所以任何解决方案都可以.

例如:

(这是一个测试"正则表达式的句子")

应该成为

(这是最好的"正则表达式的句子")

java regex parsing

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

Firestore:库中的包引用无效

更新到com.google.firebase:firebase-firestore:16.0.0I 后,我得到以下lint错误:

  Error: Invalid package reference in library; not included in Android: javax.naming.directory. Referenced from io.grpc.internal.DnsNameResolver.JndiResolver. [InvalidPackage]
  Error: Invalid package reference in library; not included in Android: javax.naming. Referenced from io.grpc.internal.DnsNameResolver.JndiResolver. [InvalidPackage]
Run Code Online (Sandbox Code Playgroud)

似乎grpc依赖性lint令人不快.我怎么解决这个问题?

android lint gradle firebase google-cloud-firestore

19
推荐指数
2
解决办法
3167
查看次数

如何在Java中动态命名对象?

假设我需要创建一系列String []对象.

我知道如果我想创建一个名为"test"的字符串数组来保存3个字符串,我就能做到

String [] test = new String [3];

但是,假设我需要制作一系列这些阵列,我希望它们被命名为1,2,3,4,5 ......等等.无论我需要多少,我都不知道我有多少需要.

我如何实现类似的效果:

for (int k=0; k=5; k++){ 
String[] k = new String[3];
}
Run Code Online (Sandbox Code Playgroud)

这将创建5个名为1到5的字符串数组.基本上我希望能够创建一个名称由其他函数决定的数组对象.我为什么不能这样做?我只是傻了吗?

java arrays dynamic object

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

生成随机值列表,并获得新的生成器

我在我的应用程序中使用System.RandomRandom类型类生成随机数.但是我想生成一个任意长度的随机浮点列表,其函数类似于randoms :: StdGen -> Int -> ([Float], StdGen)

没有获得新发电机的限制,我可以很容易地写 randoms gen n = (take n $ randoms gen) :: [Float]

然而,这让我开始使用相同的随机生成器,这意味着如果我连续两次运行此函数,我将获得相同的列表,除非我去其他地方使用生成器获取新的生成器.

如何生成无限(或任意长度)随机值列表,同时"刷新"我的随机生成器.

random haskell

13
推荐指数
2
解决办法
2345
查看次数

带有服务器端组件的Android应用程序是否应该直接访问Facebook?

如果我正在构建一个使用Facebook SDK的Android应用程序,并且还有一个具有大部分相同功能的Web应用程序,那么Android应用程序应如何处理社交操作?它应该通过SDK直接向Facebook API发出请求,还是应该通过我自己的API发布到Web应用服务器,并允许网络应用代表Android应用向Facebook发出请求?大多数Facebook for Android示例都使用前一种方法,但没有明确讨论最佳实践,因为有一个Web后端将具有与Android应用程序相同的社交功能.

android facebook facebook-android-sdk

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

Rails 4:ActiveRecord不保存任何属性,保存默认值

我有一个User与某些属性模型,叫他们foobar.所以我的模型看起来像这样:

class User < ActiveRecord::Base
  attr_accessor :foo, :bar
end
Run Code Online (Sandbox Code Playgroud)

然后我做以下事情:

user = User.new
user.foo = "123"
user.save!
Run Code Online (Sandbox Code Playgroud)

我的开发日志显示:

INSERT INTO "users" DEFAULT VALUES RETURNING "id"
Run Code Online (Sandbox Code Playgroud)

然后,如果我进入Rails控制台,User.first我会得到类似的东西:

#<User id: 4, foo: nil, bar: nil>
Run Code Online (Sandbox Code Playgroud)

我正在使用Postgres,我没有将其他模型保存到数据库,为什么我的User模型保存默认值?

postgresql activerecord ruby-on-rails ruby-on-rails-4

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