在common_apps/show中,我编写了一个if/else语句,检查用户是否有"common_app",如果没有,我会重定向它们。
在相应的common_apps/show视图中,我只是渲染common_app。
然而,在用户应该重定向的情况下,rails会产生错误
nil' is not an ActiveModel-compatible object. It must implement :to_partial_path.
发生这种情况的原因是,如果用户没有common_app,@common_app将为nil。然而,在common_app控制器中,我确实有if/else语句,所以如果common_app为nil,那么它应该重定向到另一个页面。
我应该如何写这篇文章,以便在用户没有common_app的情况下,他们被重定向,而不是看到零错误?
这是我在控制器中的表演定义:
def show
if current_user.common_app.present?
redirect_to new_common_app, notice: "Looks like you haven't made your common application. Fill it in below."
else
@common_app = current_user.common_app
end
end
这是我的节目视图:
<% provide(:title, current_user.name) %>
<h1><%= current_user.name %></h1>
<ul>
<%= render @common_app %>
</ul>
if条件的逻辑是错误的。可以更好地写成:
def show
@common_app = current_user.common_app
redirect_to new_common_app_path, notice: "Looks like you haven't made your common application. Fill it in below." unless @common_app.present?
end
在您的表演动作中,为什么不更改为if-current_user.common_app.nil?或者即使!current_user.common_app
如果你想在部分中使用@common_app变量,你可以这样做
<%= render partial: "name_of_partial", locals: {common_app: @common_app} %>