仍然得到 nil' 不是与 ActiveModel 兼容的对象,即使控制器应该重定向



在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} %>

相关内容

  • 没有找到相关文章

最新更新