我正在使用偏执狂宝石。
我的数据库中有很多项目,但是出于某种原因,它们的行为就好像被删除了一样。当我导航到我的项目/ 1路线时,我收到错误:
Couldn't find Project with id=1 [WHERE "projects"."deleted_at" IS NULL]
当我在控制台中输入时:
Project.find(1).deleted_at
我得到了
nil
这里发生了什么?
这是我的控制器显示动作:
def show
@project = Project.find(params[:id])
@comments = Comment.all.where(:project_id => @project.id)
@updates = ProjectUpdate.all.where(:project_id => @project.id)
end
发生错误
@project = Project.find(params[:id])
以下是一些模型项目范围:
scope :by_category, lambda {|category| {:conditions => {:category_id => category.id}}}
scope :by_npo, lambda {|npo| {:conditions => {:npo_id => npo.id}}}
Project.find(1)
我得到:
=> #<Project id: 1, name: "project 1", npo_id: 1, description: "project1 description", location_id:
4, singular_unit: "1", past_tense_action: "past tense action", conversion: #<BigDecimal:7547d78,'0.1
5E1',18(45)>, created_at: "2014-05-13 00:12:33", updated_at: "2014-05-22 01:20:51", future_tense_act
ion: "future tense action", plural_unit: "2", amount1: #<BigDecimal:75475b0,'0.1E2',9(36)>, amount2:
#<BigDecimal:7547520,'0.2E2',9(36)>, amount3: #<BigDecimal:7547490,'0.3E2',9(36)>, min_amount: nil,
other_amount: true, short_description: "project1 short description", featured_image_id: 3, deleted_
at: nil>
从我的索引页面链接到它2ice(这是相关代码:
<div class="pj">
<h5><%= link_to project.name, project, :class => "button-link" %> </h5>
<hr />
<div class="index_featured_image">
<%= link_to image_tag(project.get_featured_image, :alt => "Project Title", class: "featured_image"), project %>
</div>
<div class="proj-content">
<p><strong><%= link_to project.npo.name, npo_path(project.npo) %></strong></br>
<%= project.short_description %></p>
</div>
<div>
<p class="project-loc"><i class="footicons fi-marker large"></i> <%= project.location.city_state %></p>
</div>
<div class="text-center">
<%= button_tag :type => "button", :class => "radius" do %>
<%= link_to "View More", project, :class => "button-link" %>
<% end %>
</div>
</div>
答案 0 :(得分:0)
夫妻猜测和一些建议。
首先是猜测。如果Project.find(params[:id])
在表格中调用WHERE "projects"."deleted_at" IS NULL
条件,则必须在项目上进行default_scope
调用。虽然它仍然很奇怪为什么id阻止find方法找到正确的项目,如果它真的没有被删除。让我看看default_scope(或者更好的只是将整个模型发布在一个要点中),我可能会告诉你更多。
现在有些建议。它与当前的问题并不紧密相关,但我相信,这些日子会让你的Rails生活变得更轻松。
尽量不要使用弃用的语法,继续使用新语法。 例如。那些范围调用看起来应该是这样的
scope :by_category, ->(category){where(category_id: category.id)}
不要将.all
与.where
一起使用。你根本不需要它。 .where
调用将返回您要查找的ActiveRecord :: Relation对象。
尝试减少控制器中的实例变量数量。例如,您可以在@comments
操作中省略@updates
和show
变量的使用,前提是您已在Project模型上设置了所需的关联。
has_many :comments
has_many :updates, class_name: ProjectUpdate
然后在视图中,您可以将它们称为@ project.comments和@project.updates,而无需单独存储它们。它会稍微清理一下控制器。此外,如果您想确保评论和更新不是延迟加载的,您可以通过调用@project = Project.includes(:comments, :updates).find(params[:id])
将它们与项目一起加载。
希望这会有所帮助。我会更新答案,我会在问题上找到更具体的内容。