【问题标题】:Can't access strong Params through another Model. Rails 4无法通过另一个模型访问强参数。导轨 4
【发布时间】:2015-05-21 20:14:12
【问题描述】:

由于某种原因,我无法从其他模型访问参数。我在我的代码中使用has_many :through 关联。我使用 Rails 4.2。

这是我的代码:

/models/company.rb

class Company < ActiveRecord::Base
  has_many :bonds
  has_many :users, :through => :bonds
end

/models/user.rb

class User < ActiveRecord::Base
  has_many :bonds
  has_many :companies, :through => :bonds
end

/models/bond.rb

class Bond < ActiveRecord::Base
  belongs_to :companies
  belongs_to :users
end

/config/routes.rb

  resources :bonds
  resources :users
  resources :companies

我制作了一个简单的表格,通过选择名称并匹配它们,我可以在公司和用户之间建立联系。它工作正常。这是代码:

/views/bonds/_form.html.erb

<%= form_for(@bond) do |f| %>

  <div class="field">
    <%= f.select :users_id, User.all.collect { |p| [ p.name, p.id ] } %>
  </div>
  <div class="field">
    <%= f.select :companies_id, Company.all.collect { |p| [ p.name, p.id ] } %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

这是停止工作的代码:/views/bonds/show.html.erb

<p>
  <strong>User:</strong>
  <%= @bond.users.name %> 
</p>

<p>
  <strong>Company:</strong>
  <%= @bond.companies.name %>
</p>

它显示了这个错误:

未初始化的常量 Bond::Users

但如果我将 /views/bonds/show.html.erb 更改为此它就可以正常工作。

<p>
  <strong>User:</strong>
  <%= @bond.users_id %>
</p>

<p>
  <strong>Company:</strong>
  <%= @bond.companies_id %>
</p>

也许有人可以帮忙?我想这可能是因为我无法从其他型号访问strong params。但我不知道如何解决它。

还是谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 nested associations


    【解决方案1】:

    要查看与@bond 关联的用户名,您可以:

    1) 将belongs_to :bonds 更改为belongs_to :bond(注意belongs_to 关联类型是单数);

    2) 将bonds 表中的users_id 列重命名为user_id

    2) 写@bond.user.name

    【讨论】:

    • 如果users.namebond 相关联,我该如何调用它们?
    • @DanielsV 您只能在实例上调用name,而不能在集合上调用。要查看所有@bond.users 名称,您可以使用@bond.users.pluck(:name)(与@bond.users.map(&amp;:name) 相同)
    • 我只需要看到一个用户名。一个键与之相关联。也许你能告诉我该怎么做?
    • 听起来你是对的 :D 现在我有这个undefined method 'name' 也许你也有这个的解决方案?
    • @DanielsV 检查以确保您已将复数更改为单数 every 在需要的地方(例如 - f.select :users_id => f.select :user_id)。要检查 name 有什么问题,请检查 db 中的 users 表是否有 name 列。在 db 中检查您的迁移和主键。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 2019-09-30
    • 2014-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多