基本上我有一个关注按钮,当单击页面刷新时,我会显示一个取消关注按钮。以下是我用来呈现所需特定表单的代码:
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
但正如弗雷德里克所说,如果你已经有了对象的替换值,你就不能设置它吗?