如果第一个键不存在,我如何在哈希中使用键的另一个值,例如 ruby/rails 中的某种类型的回退?



基本上我有一个关注按钮,当单击页面刷新时,我会显示一个取消关注按钮。以下是我用来呈现所需特定表单的代码:

follow_forms部分:

<% unless current_user?(@user) %>
  <% if current_user.following?(@user) %>
    <%= render 'relationships/partials/unfollow' %>
  <% else %>
    <%= render 'relationships/partials/follow' %>
  <% end %>
<% end %>

任何我将表单更改为 ajax 表单,因为我不希望页面刷新,并且在表单提交成功后,我想将关注按钮/表单替换为取消关注按钮/表单。这不是直截了当的,因为一次只显示 1 个表单,所以我无论如何都无法使用我的 jquery 选择器来查找此表单。

我决定做的是创建一个新动作,使follow_form部分化,这样我就可以使用我的 jquery 选择器操作适当的表单。

新操作:

class RelationshipsController < ApplicationController
  def get_follow_form
    respond_to do |format|
      format.html { render :partial => 'relationships/partials/follow_form_ajax' }
    end
  end
end

现在的问题是我无法访问@user实例变量。这无关紧要,因为我可以通过jquery成功数据获取刚刚关注的用户,然后将其作为新ajax调用中的数据传递给get_follow_form_url然后将该信息作为局部变量传递到部分。

我仍然遇到@user实例变量不可用的问题。这就引出了我的问题。

如果实例变量不为 nil/不存在,如何使另一个值被使用?

以下表格:

<%= form_for current_user.relationships.build(:followed_id => @user.id), :remote => true do |f| %>
<%= f.hidden_field :followed_id %>
<%= f.submit "Follow", :class => 'followButton' %>
<% end %>

我可以做这样的事情吗

 :followed_id => @user.id <-if this doesn't exist use this-> user.id 

还有其他方法可以解决这个问题,例如创建仅用于整个情况的新部分或创建一些混乱的if语句,但我觉得创建重复表单应该是我的最后一个选择。

我期待您的解决方案,谢谢

亲切问候

有一种

非常简单的方法可以做到这一点,假设你有你的"后备"ID:

:followed_id => @user.present? ? @user.id : fallback_id

使用类似 andand gem 的东西,或者只是 try 和逻辑表达式:

:followed_id => @user.andand.id || user.id 

即使没有它,您也可以使用相同的逻辑,当然也不需要多个部分:

:followed_id => (@user && @user.id) || user.id

但正如弗雷德里克所说,如果你已经有了对象的替换值,你就不能设置它吗?

最新更新