处理rails关联时如何传递值



我是一个使用Rails的新手。我正在尝试将邀请对象从一个用户重新分配给另一个用户。这是控制器

def create
@invitation = Invitation.new(invitation_params)
@trip = Trip.find(params[:trip_id])
@invitation.trip = @trip
@invitation.attributes = {user: @trip.user, status: "Pending"}
authorize @invitation
if @invitation.save
InvitationMailer.with(email: params[:invitation][:email], invitation: @invitation, trip: @trip).invite_email.deliver
redirect_to trip_path(@invitation.trip)
else
render :new
end
def accept
@invitation.attributes = {user: current_user, status: "Accepted"}
if @invitation.save
redirect_to trip_path(@invitation.trip)
end

问题是,在处理对象时,通过引用传递似乎是唯一的选择。如果不使用current_user覆盖@trip.user,我无法重新分配@invitation.user。

提前谢谢。

问题是,在处理对象时,通过引用传递似乎是唯一的选择。

Ruby总是按值传递,没有任何例外。它根本不支持通过引用传递。我现在能想到的do支持pass-by-reference的主流语言只有C++(带有&sigil/运算符(、C#(带ref关键字(、PHP(&(和Perl。在C++、C#和PHP中,默认为按值传递,并且必须显式地请求按引用传递。Perl是唯一一个默认使用引用传递的选项,事实上,它不仅是默认选项,而且是唯一的选项。

所以,重复一遍:Ruby总是按值传递的。在Ruby中实现引用传递是不可能的。语言的语义不允许这样做。你必须修改语言本身并更改解释器/编译器(或编写一个新的解释器/编译器(,在这种情况下,它不再是Ruby。

从您的代码中还不太清楚到底发生了什么,但有一点是100%肯定的:通过引用传递不可能是的问题。你可以停止调查那条路。

最新更新