0

code我正在shorten尝试的one line

            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?

我应该坚持使用上述有效的代码还是有更好的方法来做到这一点?

4

3 回答 3

1

也许是这样:

(render_404; return) unless request.xhr?
于 2012-07-25T10:36:23.077 回答
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
于 2012-07-25T09:37:37.953 回答
0

你可以试试这个:

def request_invite
  render_404 return unless request.try(:xhr?)
end
于 2012-07-25T09:35:50.673 回答