问题描述
刚接触rails,不知道怎么表述到点子上。脚手架生成的edit页面显示有多个物品ID的text_field :item_id,我想在打开edit页面时候显示物品名称而不是ID(从另items物品表根据ID查找名称)attr_accessor :namedef name=(attr) items = Oa::Item.where('name=?', attr) if items.size == 0 item = Oa::Item.create(:name=>attr) self.item_id = item.id else self.item_id = items.first.id end end编辑之后总会新建新物品。。。 问题补充:恩,我基础不好,rails处理流程还是搞不懂,太笨了。。。给我的感觉就是它太聪明,我不知道怎么做的东西它帮我做好了,这种感觉很不喜欢。。。功能实现了,在模型定义了个方法覆盖虚拟属性的方法。update方法首先根据id查找到Post,再更新其属性.我在页面要显示的东西在Post属性里是没有的。。。cxh116 写道
解决方案
首先,你的了解一下REST, 引用http://guides.rubyonrails.org/v2.3.11/getting_started.html#rest简单的讲一下你没有修改前的流程.当你打开edit页面时,会生成一个form,如果你的model是Post,那么form的url应该是/posts/1,这个1是被编辑元素的id,还会在form表单生成一下隐藏的字段_method,它的值是put,到服务器处理时,这个请求是当作一个put请求,而不是post请求.提交到,到控制器的update方法,update方法首先根据id查找到Post,再更新其属性.你要显示什么是改view,而不是改modle我觉得你应该把<Web开发敏捷之道-应用Rails进行敏捷Web开发-第三版>这本书的示例先做做
解决方案二:
慢慢来,这是一个积累的过程 只要它与Post关联,你通过关联就可以拿到你想要的东西