为什么我不能在 Ruby 中访问块内的实例变量?
Why can't I access instance variables inside block in Ruby?
我正在使用 Rails 4、Ruby 2.1 和 mongoid 作为我的 DBMS。
在我的创建方法中,我正在创建一个传真对象并使用 Phaxio 的 API 发送它。由于各种原因,我正在尝试(未成功)访问 respond_to
块内的属性。 @fax variable
似乎有效,但其他无效。例如,如果传真已发送,我想将状态 (@fax[:status]
) 设置为 "sent",否则我希望它是 "draft"。将它设置在块外的第五行,没有问题。但是当我进入我的街区并且传真成功发送时,我似乎无法将其设置为 "sent"。
另外,我试过用不同的方式写出来 - 现在是 params[:status] = "sent"
,但我试过 @fax.status
、@fax[:status]
和 fax.write_attribute(:status, "sent")
。
我读过文档说我应该能够从块内部访问局部变量,所以这是一个实例变量吗?我该怎么办?
def create
@fax = Fax.new(fax_params)
@recipient = @fax.recipient_name
@number = ("+1" + @fax.fax_number.to_s.gsub(/[^0-9]/, "")).to_s
@fax[:status] = "draft"
respond_to do |format|
if @fax.save
if params[:send]
pdf_html, pdf_file = FAXMailer.save_pdf(@fax, current_user)
@sent_fax = Phaxio.send_fax(to: @number, string_data: pdf_html, string_data_type: 'html')
if @sent_fax["success"]
params[:status] = "sent"
format.html { redirect_to faxes_url, notice: @sent_fax["message"] }
else
params[:status] = "draft"
format.html {redirect_to faxes_url, notice: @sent_fax["message"]}
format.json { render :show, status: :created, location: @fax }
end
elsif params[:draft]
params[:status] = "draft"
format.html { redirect_to faxes_url, notice: "Fax saved as draft" }
format.json { render json: @fax.errors, status: :unprocessable_entity }
end
end
end
end
提前致谢!
Sontya 的想法是正确的,但我不得不在我的函数调用中加入 :status,即 @fax.update_attribute(:status, "set")。附带一提,任何人都可以将我带到某个地方,我可以弄清楚为什么我以前的尝试没有奏效吗?我是在使用已弃用的方法,还是我不知道的 rails 4 约定?
谢谢大家!
不好意思,状态应该是一个符号,@fax.update_attribute(:status, "set")
我正在使用 Rails 4、Ruby 2.1 和 mongoid 作为我的 DBMS。
在我的创建方法中,我正在创建一个传真对象并使用 Phaxio 的 API 发送它。由于各种原因,我正在尝试(未成功)访问 respond_to
块内的属性。 @fax variable
似乎有效,但其他无效。例如,如果传真已发送,我想将状态 (@fax[:status]
) 设置为 "sent",否则我希望它是 "draft"。将它设置在块外的第五行,没有问题。但是当我进入我的街区并且传真成功发送时,我似乎无法将其设置为 "sent"。
另外,我试过用不同的方式写出来 - 现在是 params[:status] = "sent"
,但我试过 @fax.status
、@fax[:status]
和 fax.write_attribute(:status, "sent")
。
我读过文档说我应该能够从块内部访问局部变量,所以这是一个实例变量吗?我该怎么办?
def create
@fax = Fax.new(fax_params)
@recipient = @fax.recipient_name
@number = ("+1" + @fax.fax_number.to_s.gsub(/[^0-9]/, "")).to_s
@fax[:status] = "draft"
respond_to do |format|
if @fax.save
if params[:send]
pdf_html, pdf_file = FAXMailer.save_pdf(@fax, current_user)
@sent_fax = Phaxio.send_fax(to: @number, string_data: pdf_html, string_data_type: 'html')
if @sent_fax["success"]
params[:status] = "sent"
format.html { redirect_to faxes_url, notice: @sent_fax["message"] }
else
params[:status] = "draft"
format.html {redirect_to faxes_url, notice: @sent_fax["message"]}
format.json { render :show, status: :created, location: @fax }
end
elsif params[:draft]
params[:status] = "draft"
format.html { redirect_to faxes_url, notice: "Fax saved as draft" }
format.json { render json: @fax.errors, status: :unprocessable_entity }
end
end
end
end
提前致谢!
Sontya 的想法是正确的,但我不得不在我的函数调用中加入 :status,即 @fax.update_attribute(:status, "set")。附带一提,任何人都可以将我带到某个地方,我可以弄清楚为什么我以前的尝试没有奏效吗?我是在使用已弃用的方法,还是我不知道的 rails 4 约定?
谢谢大家!
不好意思,状态应该是一个符号,@fax.update_attribute(:status, "set")