我有一个具有: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:
好吧,这是一个验证问题,使"编辑"中的更改无法正常工作,但我仍然喜欢在没有回调的情况下更新原始问题的答案!
我正在尝试创建一个Java工具,它将扫描Java应用程序的结构并提供一些有意义的信息.为此,我需要能够从项目位置(JAR/WAR或只是一个文件夹)扫描所有.class文件,并使用反射来阅读他们的方法.事实证明这几乎是不可能的.
我可以找到许多基于URLClassloader的解决方案,它允许我从目录/存档加载特定的类,但是没有一个允许我加载类而没有关于类名或包结构的任何信息.
编辑:我想我的说法很差.我的问题不是我无法获得所有的类文件,我可以通过递归等来做到这一点并正确定位它们.我的问题是为每个类文件获取一个Class对象.
{
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 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类,然后使用它进行反序列化,但我知道必须有一个更优雅的解决方案.
我该怎么做?
我不是很擅长RegEx,有人可以给我一个正则表达式(在Java中使用),它会选择不在两个引号之间的所有空格吗?我试图从字符串中删除所有这样的空格,所以任何解决方案都可以.
例如:
(这是一个测试"正则表达式的句子")
应该成为
(这是最好的"正则表达式的句子")
更新到com.google.firebase:firebase-firestore:16.0.0
I 后,我得到以下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
令人不快.我怎么解决这个问题?
假设我需要创建一系列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的字符串数组.基本上我希望能够创建一个名称由其他函数决定的数组对象.我为什么不能这样做?我只是傻了吗?
我在我的应用程序中使用System.Random
和Random
类型类生成随机数.但是我想生成一个任意长度的随机浮点列表,其函数类似于randoms :: StdGen -> Int -> ([Float], StdGen)
没有获得新发电机的限制,我可以很容易地写
randoms gen n = (take n $ randoms gen) :: [Float]
然而,这让我开始使用相同的随机生成器,这意味着如果我连续两次运行此函数,我将获得相同的列表,除非我去其他地方使用生成器获取新的生成器.
如何生成无限(或任意长度)随机值列表,同时"刷新"我的随机生成器.
如果我正在构建一个使用Facebook SDK的Android应用程序,并且还有一个具有大部分相同功能的Web应用程序,那么Android应用程序应如何处理社交操作?它应该通过SDK直接向Facebook API发出请求,还是应该通过我自己的API发布到Web应用服务器,并允许网络应用代表Android应用向Facebook发出请求?大多数Facebook for Android示例都使用前一种方法,但没有明确讨论最佳实践,因为有一个Web后端将具有与Android应用程序相同的社交功能.
我有一个User
与某些属性模型,叫他们foo
和bar
.所以我的模型看起来像这样:
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
模型保存默认值?