1

reqここで確認できるように、変数に依存するコードのプロセスを変更しようとしています:

@res = @conn.post do |request| if req == 'post'
@res = @conn.get do |request| if req == 'get'

問題は、これによりエラーが発生するように見えることです。

stack.rb:89: syntax error, unexpected end-of-input, expecting keyword_end
user2.send_csr

私の質問は、この問題を回避するために何を変更する必要がありますか? 私のコードに関する詳細情報が必要な場合:

def send(req,ww,text1=nil,text2=nil)
@conn = Faraday.new 'https://zombo.de/rest', :ssl => {:verify => false}
@conn.basic_auth(@username,@password)
@res = @conn.post do |request| if req == 'post'
@res = @conn.get do |request| if req == 'get'
 request.url ww
 request.headers['Content-Type'] = text1 unless text1 == nil
 request.body = text2 unless text2 == nil
end
puts @res.body
end

def send_csr
  send('post','csr','text/plain',"#{File.read(@csr[0..-5])}")
end

user2.send_csr
4

3 に答える 3

1

if技術的には、get または post に渡したいブロックの途中にあるため、post-fixをそのまま配置することはできません。

あなたはこれを行うことができます:

@res = @conn.get do |request| 
 request.url ww
 request.headers['Content-Type'] = text1 unless text1 == nil
 request.body = text2 unless text2 == nil
end if req == 'get'

ただし、その場合、ケースごとにコード ブロックを繰り返す必要があります。また、長いブロックの後に条件文を修正しないことをお勧めします。後でコードを読むときにそれらを見つけるのは困難です。

したがって、この構文を使用すると、send最適に機能する可能性があります(文字列がメソッド名と一致するため機能します)

@conn.send(req) do |request| 
 request.url ww
 request.headers['Content-Type'] = text1 unless text1 == nil
 request.body = text2 unless text2 == nil
end
于 2013-09-27T08:20:30.487 に答える