use*_*289 2 ruby ruby-on-rails ruby-on-rails-4
我的rails应用程序内置了一个简单的消息传递系统.
该表如下所示:
create_table :messages do |t|
t.integer :from_id
t.integer :to_id
t.string :subject
t.text :message
t.timestamps
end
Run Code Online (Sandbox Code Playgroud)
模型也很简单:
belongs_to :to_id, class_name: "User", :foreign_key => "to_id"
belongs_to :from_id, class_name: "User", :foreign_key => "from_id"
Run Code Online (Sandbox Code Playgroud)
但是,当我提交消息表单时,我得到了一个type mismatch,当我尝试在rails控制台中创建新消息时,它会抛出相同的错误.
User(#-588576898) expected, got String(#-603326958)
Run Code Online (Sandbox Code Playgroud)
显然,它期待的是一个User对象,而不仅仅是user.id价值.我认为这是由于我创建模型的错误?
我哪里做错了?
编辑:
表格代码如下.但是,请注意我在Message从Rails控制台直接创建时遇到了同样的问题,所以我假设它是模型:
> m = Message.new
=> #<Message id: nil, from_id: nil, to_id: nil, subject: nil, message: nil, created_at: nil, updated_at: nil>
> m.from_id = 1
ActiveRecord::AssociationTypeMismatch: User(#-582821898) expected, got Fixnum(#-597136528)
Run Code Online (Sandbox Code Playgroud)
这是表单,剥离标签和HTML:
<%= form_for @message, :url => {:controller => "messages", :action => "create"}, :html => {:class => 'form-horizontal form', :role => 'form'} do |f| %>
<%= f.select :to_id, options_from_collection_for_select(User.all, :id, :first_name) %>
<%= f.text_field :subject %>
<%= f.text_area :message %>
<%= f.submit class: "btn btn-large btn-primary" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
关联的名称(第一个参数belongs_to)不应与包含外键的列的名称相同.
例如
belongs_to :to, class_name: "Message"
Run Code Online (Sandbox Code Playgroud)
目前的情况是,为关联生成的访问器方法会遮蔽属性的访问器方法.
| 归档时间: |
|
| 查看次数: |
2459 次 |
| 最近记录: |