为什么我不能在Ruby中访问块内的实例变量?

时间:2015-02-05 05:26:41

标签: ruby-on-rails ruby mongoid

我使用Rails 4,Ruby 2.1和mongoid作为我的DBMS。

在我的创建方法中,我创建了一个传真对象并使用Phaxio的API发送它。我出于各种原因尝试(未成功)访问respond_to块内的属性。 @fax variable似乎有效,但其他人不是。例如,如果传真被发送,我想将状态(@fax[:status])设置为"发送"否则我希望它是" draft"。在块外面的第五行设置它没有问题。但当我进入我的区域,并且传真成功发送时,我似乎无法将其设置为"发送"。

另外,我尝试过以不同方式编写它 - 现在是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

提前致谢!

2 个答案:

答案 0 :(得分:1)

抱歉,我的不好,状态应该是一个符号,@ fax.update_attribute(:status," set")

答案 1 :(得分:0)

Sontya有正确的想法,但我必须在我的函数调用中输入:status,即@ fax.update_attribute(:status,“set”)。在旁注,任何人都可以指引我到某个地方,我可以弄清楚为什么我以前的尝试不起作用?我是否使用了弃用的方法,或者它是我不知道的轨道4惯例?

全部谢谢!