Rails 4 - 范围 - 限制用户自己的属性

时间:2016-01-09 23:30:50

标签: ruby-on-rails associations scopes

我正在尝试在Rails 4中创建一个应用程序。

我的个人资料表单允许用户制作个人资料。该档案的一部分是为了他们的资格。

协会是:

profile.rb

has_many :qualifications  
    accepts_nested_attributes_for :qualifications,  reject_if: :all_blank, allow_destroy: true

资格证书rb

  belongs_to :profile

我的个人资料视图文件夹然后包含部分显示该个人资料的资格。节目部分有:

<% Qualification.pending.order(year_earned: :asc).each do |qualification| %>
            <div class="row">

                      <div class="col-md-12">
                        <div class="profilequalifications">
                            <%= qualification.current_study  %>

                        </div>  
                      </div>    
            </div>

          <% end %>

我的资格模型的范围为:

  scope :pending, -> { where(pending: true) }

问题是,每个配置文件都列出了所有资格。如何将此限制为仅列出其自身资格的每个配置文件。

我已尝试添加&#39;个人资料&#39; /&#39; @ profile&#39;在不同的地方对视图进行部分调查,但这些尝试只会产生错误。

是否有一个如何做到这一点的例子。我认为rails可能知道如何执行此操作,因为资格的视图表单嵌套在配置文件表单中。

采取措施

我将资格部分显示更改为:

<% profile.qualifications.pending.order(year_earned: :asc).each do |qualification| %>
            <div class="row">

                      <div class="col-md-12">
                        <div class="profilequalifications">
                            <%= qualification.current_study  %>

                        </div>  
                      </div>    
            </div>

我将个人资料显示页面更改为:

<%= render :partial => 'profiles/qualifications', profile: @profile %>

我收到此错误:

未定义的局部变量或方法`profile&#39;对于#&lt;#:0x007f97ba143030&gt;

1 个答案:

答案 0 :(得分:0)

我认为你需要将你的个人资料传递给部分,所以:

<%= render 'your_partial', profile: @profile %>

然后你可以在局部使用它,例如

<% profile.qualifications.each do |q| %>
  <%= q.name %>
<% end %>