我有几个模型has_many :attachments
。
创建Note view
后,我正在尝试重定向回Note
。
这是我正在尝试的附件控制器代码。 @note
告诉我此附件与Note
。
# GET /attachments/new
# GET /attachments/new.json
def new
@attachment = Attachment.new
@comment = params[:comment_id]
@note = params[:note_id]
respond_to do |format|
format.html # new.html.erb
format.json { render json: @attachment }
end
end
# POST /attachments
# POST /attachments.json
def create
@attachment = Attachment.new(params[:attachment])
respond_to do |format|
if @attachment.save
if @note != nil
format.html { redirect_to note_path(@note), notice: 'Attachment was successfully created.' }
else
format.html { redirect_to attachments_path, notice: 'Attachment was successfully created.' }
end
但是,create
代码发生时,@ note是零。
感谢您的帮助!
答案 0 :(得分:0)
通常,您可能不会在同一上下文中看到“新”和“创建”块。这有点令人满意,所以让我们更具体一点:当你调用“create”时,你在“new”中声明的变量将不会存在。因此,您要在“create”中使用的任何变量也必须在那里声明。
您可以做的一件事(取决于代码)是在为您初始化这些变量的不同控制器方法之间共享一个块。例如:
before_filter :initialize_vars, only: [:new, :create]
...
def initialize_vars
@note = params[:note_id]
end
“before_filter”将在将任何新请求发送到“new”或“create”方法之前执行“initialize_vars”方法。
更一般地说,这涉及一个非常重要的Rails概念(以及一般的服务器端Web工程) - 服务器中的“状态”很少。服务器接收请求,处理它并忘记它。需要记住的所有内容都必须存储在服务器中,或者通过用户发送的请求以某种方式进行通信。