新手问题 simple_form_for 表单 f.association 乱码

xiqingxl · 2016年03月15日 · 最后由 jasonliu 回复于 2016年03月15日 · 2191 次阅读

使用 simple_form_for 生成表单的时候,<%= f.association :cat %> 显示出来的是乱码。 检查数据库里面的内容都是正常没有问题的。

class Cat < ActiveRecord::Base
    has_many :products
end
class Product < ActiveRecord::Base
    acts_as_taggable
    belongs_to :cat
    attr_accessor :cat,:tag
end
<%= simple_form_for @product do |f| %>
  <%= f.association :cat %>
   <%= f.input :title ,label: false %>
   <%= f.input :price ,label: false %>
   <%= f.input :img,as: :hidden %><br>
   <%= f.input :reson ,as: :text,label: false %><br>
   <%= f.input :tag,label:false %>
   <%= f.button :submit, "提交",class: "btn btn-primary" %>
<% end %>

在网上搜索了很久也没有找到原因,希望有朋友可以帮下忙,非常感谢。

这个不是乱码,而是 cat 的对象吧,你应该是哪个地方用错了,最好把那一块的代码贴出来

#1 楼 @jasonliu 嗯 就是对象,但是不知道是哪里出问题了。我重新把表单的内容也贴上了。谢谢你

仔细看下文档,你这里应该是显示的 cat 的名字,试着这样做:

f.association :cat, label_method: :cat_name

删除这行试试? attr_accessor :cat, :tag

在 cat mdoel 里面定义 to_s

def to_s
  name
end

#4 楼 @qinfanpeng 因为 cat,tag 不是 model 里面对应字段,删除的话会提示 undefined method。谢谢你的回复。

#5 楼 @kikyous 按照你的方法,好了显示正常。不过不懂是什么原理,能请教一下吗?我是初学者。

#7 楼 @xiqingxl to_s 就是告诉 rails 怎么把一个 Cat 实例转化成字符串

默认的 to_s 方法执行的结果就是#这样

#3 楼 @jasonliu 根据你的指点,问题已经解决了。初学者英文也不好,文档确实看的不够仔细。非常感谢,还麻烦你专门查阅文档。

#8 楼 @kikyous 非常感谢,真厉害👍

#5 楼 @kikyous 这是一个解决方案,但我并不提倡这样做,一个 cat 对象 to_s 之后输出的是 name,难免会给人带来困扰。

#11 楼 @jasonliu 这有什么困扰的,to_s 是 rails way

#9 楼 @xiqingxl 英文不好别担心,坚持使用 google,时间长了你就习惯了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号