对于这个问题,我觉得有个问题比较严重。 就是当一个数值一定要确保他存储了,才可以执行后面的方法。 如果是数值没有存储,后面的方法执行了。 如是是数值存储了,后面的方法没有执行。 都是非常破坏性的。
怎么样避免这样的方法会比较好呢?
if @x.save
@y.save #这样执行,又怕如果@x存储了,后面@y又没有存储成功。
after_save #也存在这样的问题,请问大家是怎么处理这类问题的呢?
#1 楼 @chechaoyang #2 楼 @tiseheaini
搞懂了,原来就像 @leozwa 说的那样。因为 A 是 nil。 那请问我应该怎么样才可以让他出现空值,而不要报错呢?
- if B.first.A
= B.first.A.price
这样是好办法吗?
#2 楼 @wuwx http://stackoverflow.com/questions/2942162/rails-attribute-changed 原来真的有个_was 值。。。第一次用。谢谢。
#6 楼 @help5305fff 这个真心现在没有,不过你说到了,我才发现以后可能会有这方面需求。 把商品 ID 放库存表里,以后如果有这样需求,加个字段,在改成 has_many 就可以了~^_^
#3 楼 @jjym #4 楼 @kenshin54 SKU=Stock Keeping Unit(库存量单位) “商品有库存,而不是库存有商品" 这样只描述法,就可以很合理的把商品 ID 放库存表里。 不好意思,第一次使用一对一关联,所以纠结了一下。
#1 楼 @help5305fff 当你说到“考虑下使用查询时,哪样最快,性能最高。”我就应该好好从新构思一下一对一关联的定义了,以前一直没有考虑过性能的问题。
#6 楼 @help5305fff 恩。觉得你说的订单详细表是我说的“表“购买”,purchase”加强版~^_^,同时保存了订单信息还有商品信息
#2 楼 @help5305fff 恩。你说的那个更改价格的问题之前一直没有考虑到。 #4 楼 @zfjoy520 items,item_details 分别存储的字段是什么?根据你们这个表,是如何处理商品与订单之间的关系的?
#76 楼 @zhangjinzhu 那不错哦。我也想搞国内的服务器,我想问问你们的服务器是什么地方提供的呢?
#17 楼 @poshboytl 不对呀。一开始是不可以使用的,详见 7 楼,在我配上 8 楼的方法的时候,是不可以的。后面我也没有把 public key 加到 git 账户中,等我看看是什么情况。
#15 楼 @poshboytl 恩。直接在 server 上可以直接 git clone 的~
#12 楼 @poshboytl #13 楼 @jimrokliu OK.原来这是新发现,我去查查原因。有结果了,把结果发上来。~^_^
#10 楼 @poshboytl 哦。但是我按照 8 楼那写的那个做法,就可以进行 git clone 了,是不是说需要在 deploy 处加上 ssh_options[:forward_agent] = true,更确保可以 clone 和 pull 呢?
@zhangyuan
@jimrokliu
@poshboytl
我并未在 deploy.rb 上添加ssh_options[:forward_agent] = true
只是加了个 config 在 SSH 中,就正常运行了,请问是什么原因呢?
解决方法: 在本地开发的电脑上,先创建 config 文件,如果已经存在,就不需要另外创建了。
touch ~/.ssh/config
然后在 config 中,加入下面的内容 example.com 为服务器的网址,或者 IP 都可以。
Host example.com
ForwardAgent yes
#4 楼 @zhangyuan #5 楼 @jimrokliu
deploy@li85-215:~$ cp -r /home/git/saler.git .
deploy@li85-215:~$ ls
saler.git
deploy@li85-215:~$ git clone git@XX.XX.243.215:saler.git
Cloning into saler...
The authenticity of host 'XX.XX.243.215 (XX.XX.243.215)' can't be established.
ECDSA key fingerprint is d0:f0:6c:8e:3a:e4:34:09:c5:2f:38:91:fd:41:81:6a.
Are you sure you want to continue connecting (yes/no)?
Host key verification failed.
fatal: The remote end hung up unexpectedly
原来真的如你们所说的,git clone 是用不到的,第一次见过这样的问题。一直以为可以顺利操作复制之类的问题,就可以把项目复制过来,原来正常的复制和 git clone 是不一样的。
#2 楼 @zhangyuan 不对呀,我代码仓库就是在 VPS 里,只不过是 git 用户,而部署的用户是 deploy。
我比较好奇的是,楼主用的服务器是什么服务器?国内的哦。 还有是怎么备案的?
$gem install passenger
$sudo apt-get install libcurl4-openssl-dev #安装SSL gem
#遵从passenger官方安装指南(http://www.modrails.com/install.html)的提示,开始安装:
$rvmsudo passenger-install-nginx-module #都是默认选择,选择1,安装目录也选择默认 /opt/nginx/
这样安装的是什么 passenger?
有没有国内的 VPS 介绍呢?需要备案都没有关系。
#13 楼 @Rei 有 AT 这个功能才需要在 TOPICE 增加 mention 提醒吧。 我现在想一步一步来,不好意思,资质比较差,真心搞不懂 mentionable 是做什么用的?
我写一下我的思路,麻烦你指正一下错误。
我有多少条未读信息,也就是count notification有多少个false。
一般notification只产生在留言回复上,所以在reply上创建一个callback,每当创建了一个reply,只要不是current_user自己,就生成一个notification,并且将reply_id,user_id对应到当前留言用户和留言信息上。
然后每次查看topic的时候都注意,如果notification为false时候,就把该notification的值设置为true。
然后如果是按照我想象的那样,那 mentionable 究竟是起什么作用的,如果无限制的这样生成 notification,那不就会生成非常多的 notification 了?
这个功能弄了我好久,关键看 rubychina 源代码,太庞大了,摸不着头脑,网上找不到相关思路。
#10 楼 @Rei 大哥,根据你的解释,相对都比较清晰了,但是有几个问题搞不懂,不知道可否帮我解决一下呢? mentionable 究竟是做什么用处的?(本来只以为一个 notification 起作用,没想到有蹦出个 mentionable) 还有就是,根据功能实现来说,每当我回复文章的时候,该文章的作者应当收到一个提示“未读信息”,这样说,应该是当我 create reply 的时候,应该运行相关方法,例如创建 reply.notification,之类的运作,可是我看源代码,没有执行什么特别的功能,就是一个数据的存储而已,代码如下:
def create
@reply = @topic.replies.build(params[:reply])
@reply.user_id = current_user.id
if @reply.save
current_user.read_topic(@topic)
@msg = t("topics.reply_success")
else
@msg = @reply.errors.full_messages.join("<br />")
end
end
这一点我就摸不着头绪了,是哪里创建了 notification?