轨道上的红宝石如果在1行中缩短

时间:2012-07-25 09:34:01

标签: ruby-on-rails function line

code我想shorten one line {/ 1}}

            if !request.xhr?
                    render_404
                    return
            end

来自这个功能

def request_invite
    render_404 unless request.xhr?

        @invitation = Invite.new(params[:invite])

        if @invitation.save
            @return = { :error => false, :response => "OK" }
        else
            @return = { :error => true, :response => @invitation.errors.full_messages.join("<br />") } 
        end

        render :json => ActiveSupport::JSON.encode( @return )

end

我试过

            render_404 return unless request.xhr?

但我明白了:

invites_controller.rb:4: void value expressio render_404 return unless request.xhr?

我是否应该坚持上述有效的代码,或者有更好的方法吗?

3 个答案:

答案 0 :(得分:1)

为什么需要return?函数体不包含任何其他内容。如果有,请注意。

def request_invite
   render_404 unless request.xhr?
end

主要的问题是你不能在没有分离的情况下在一行中编写这两个命令,它会尝试评估它,但它在语法上是不正确的。

更新:

def request_invite
    unless request.xhr? then render_404; return; end

    @invitation = Invite.new(params[:invite])

    if @invitation.save
        @return = { :error => false, :response => "OK" }
    else
        @return = { :error => true, :response => @invitation.errors.full_messages.join("<br />") } 
    end

    render :json => ActiveSupport::JSON.encode( @return )

end

答案 1 :(得分:1)

也许这个:

(render_404; return) unless request.xhr?

答案 2 :(得分:0)

你可以试试这个:

def request_invite
  render_404 return unless request.try(:xhr?)
end