Rails - 一个视图中有 2 个模型(属于另一个模型的模型)

Posted

技术标签:

【中文标题】Rails - 一个视图中有 2 个模型(属于另一个模型的模型)【英文标题】:Rails - 2 models in one view (of model that belongs_to another) 【发布时间】:2013-10-01 19:30:42 【问题描述】:

对此有几个问题和答案,除了每次模型视图使用的与我需要的相反。 就我而言,我想在一个视图中显示 3 个模型。 Post belongs_to UsernameUsername has_many Posts。我拥有的第三个模型是Category has_many Posts,它通过集合选择正确显示。 视图是 Post 模型,_form.html.erb

<%= form_for(@post) do |f| %>
  <%= f.label :equipment %><br />
  <%= f.text_field :equipment %><br />
  <%= f.label 'Serial number' %><br />
  <%= f.text_field :serial_num %><br />
  <%= f.label :category %><br />
  <%= collection_select(:post, :category_id, Category.all, :id, :name, prompt: true) %>

  <%= f.fields_for :usernames do |user| %>
    <%= user.label :username %><br />
    <%= user.text_field :name %>
  <% end %>

<% end %>

这就是我想要做的 - 显示 username.name(在帖子中我有 FK username_id)。上面的代码fields_for 不起作用,它什么也不显示。 我找到的关于这个问题的所有答案都在has_many 模型的视图中,而我在belongs_to 模型的视图中需要这个。那么,如何在帖子视图中访问拥有多个帖子的用户名模型的名称属性? (目前我只能访问 Post 模型中的外键)。

post.rb

class Post < ActiveRecord::Base
  attr_accessible :category_id, :equipment, :serial_num, :username_id
  belongs_to :category
  belongs_to :username
  validates :username_id, :presence => true
end

用户名.rb

class Username < ActiveRecord::Base
  attr_accessible :name
  has_many :posts
  validates :name, :presence => true
end

routes.rb

resources :usernames
resources :categories
resources :posts

请帮忙!

【问题讨论】:

试试f.fields_for :username 首先,我有一个错误,我更正了(在我上面写的代码中是正确的),我按照您的建议更改为 :username。现在它给了我错误“无法批量分配受保护的属性:用户名” 【参考方案1】:
accepts_nested_attributes_for :username  

在你的 post.rb 中

但是你不希望帖子自动分配给 current_user????

【讨论】:

以上是关于Rails - 一个视图中有 2 个模型(属于另一个模型的模型)的主要内容,如果未能解决你的问题,请参考以下文章

Rails:在父模型的视图中创建一个 has_one 模型?

如何在Rails 5中删除模型时删除模型的所有关联

Rails:如何跨视图访问模型和控制器数据?

Rails:在嵌套视图中订购商品

Rails - 如何让两个用户 ID 与模型相关联

使用嵌套资源干燥 Rails 视图