0

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

follow_forms 部分:

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

任何我将表单更改为 ajax 表单,因为我不希望页面刷新并且表单提交成功后,我想用取消关注按钮/表单替换关注按钮/表单。这不是直截了当的,因为一次只显示一个表单,所以无论如何我都不能使用我的 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 语句,但我觉得创建重复表单应该是我最后的选择。

我期待你的解决方案谢谢

亲切的问候

4

2 回答 2

1

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

:followed_id => @user.present? ? @user.id : fallback_id
于 2012-06-12T11:09:42.263 回答
1

使用类似andand gem或 just tryand 一个逻辑表达式:

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

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

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

但是正如 Frederick 所说,如果您已经为该对象设置了替换值,您就不能设置它吗?

于 2012-06-12T10:16:51.063 回答