在routes.rb中:
resources :cars do
resources :reviews
end
resources :motorcycles do
resources :reviews
end
Run Code Online (Sandbox Code Playgroud)
在ReviewsController中:
before_filter :find_parent
def show
@review = Review.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @review }
end
end
def edit
@review = Review.find(params[:id])
end
# ...
def find_parent
@parent = nil
if params[:car_id]
@parent = Car.find(params[:car_id])
elsif params[:motorcycle_id]
@parent = Motorcycle.find(params[:motorcycle_id])
end
end
Run Code Online (Sandbox Code Playgroud)
生成Review的"show"链接很简单(这可行):
= link_to "Show", [@parent, @review]
Run Code Online (Sandbox Code Playgroud)
类似地,我想引用一个用于评论的通用编辑路径,类似于(这不起作用):
= link_to "Edit", [@parent, @review], :action => 'edit'
Run Code Online (Sandbox Code Playgroud)
有谁知道这是否可能,或者如果不可能,如何实现这一目标?
操作系统:Mac OSX 10.7.5 Python:Python 2.7.3(homebrew)pyaudio:0.2.7 portaudio:19.20111121(homebrew-portaudio)
以下脚本输出以下内容,并显示我遇到的问题:
#!/usr/bin/env python
import pyaudio
from pprint import pprint
p = pyaudio.PyAudio()
# SUCCEEDS
pprint(p.is_format_supported(input_format=pyaudio.paInt8,input_channels=1,rate=44100,input_device=0)) # => True
try:
stream = p.open(format=pyaudio.paInt8,channels=1,rate=44100,input=True,frames_per_buffer=1024)
data = stream.read(1024)
except IOError as e:
print 'This never happens: '+str(e)
# FAILS
pprint(p.is_format_supported(input_format=pyaudio.paInt8,input_channels=1,rate=22050,input_device=0)) # => True
try:
stream = p.open(format=pyaudio.paInt8,channels=1,rate=22050,input=True,frames_per_buffer=1024)
data = stream.read(1024)
except IOError as e:
print 'This fails: '+str(e)
# FAILS
pprint(p.is_format_supported(input_format=pyaudio.paInt8,input_channels=1,rate=22050,input_device=0)) # => True
try:
stream = p.open(format=pyaudio.paInt8,channels=1,rate=22050,input=True,frames_per_buffer=512)
data = stream.read(1024)
except IOError as e:
print 'This …Run Code Online (Sandbox Code Playgroud) 我的第一个问题实际上是一个设计问题。这是我第一次编写使用队列的服务,而且我也是 Go 新手。我正在尝试确定是否应该以这样的方式编写我的工作程序,即它只需从队列中弹出一条消息,对其进行处理,然后就消失了。对于像 Kubernetes 这样的东西,这看起来相当微不足道。
或者我应该让一个长寿的工作人员不断等待新消息,但如果它死了(由于错误或意外),就会重新启动?
我问这个问题的原因是,为了实现前者,感觉有点“被破解”,因为我必须使用通用的 go AMQP 库编写以下内容streadway/amqp(阅读评论):
// Pop will extract a message from the AMQP queue
func (v *Queue) Pop() (data []byte, err error) {
msgs, err := v.Channel.Consume(
v.QueueName, // queue
v.ConsmerID, // consumer
true, // auto-ack
false, // exclusive
false, // no-local
false, // no-wait
nil, // args
)
if err != nil {
return nil, err
}
// We have to use for .. range because Consume returns
// …Run Code Online (Sandbox Code Playgroud)