未定义的方法stringify键

时间:2015-04-10 12:56:59

标签: ruby-on-rails capybara haml

我知道之前已经问过这个问题,通常它与控制器中的更新方法有关。我已经经历过这一点,似乎并不是我的问题所在。我认为我的视图文件和提交标记的行相关。我尝试过一些东西但是一切都只是给我错误的参数数量。任何建议都会很棒!

查看:

= form_for [:admin, @diagnostic], url: admin_diagnostic_path(@diagnostic), html: {method: :put} do |f|
  .field
    = label_tag :notes
    = f.text_field "notes"
    = submit_tag t('.Save'), @diagnostic.data["Save"]

  .field
    = link_to 'show', admin_diagnostics_path

控制器:

def update
  @diagnostic = DiagnosticInfo.find(params[:id])
  if @diagnostic.update_attributes(params[:diagnostic_info])
    redirect_to admin_diagnostic_path, notice: 'Successfully updated.'
  else
    render action: "edit"
  end
end

测试:

it "updates a diagnostic report" do 
  diagnostic_info = FG.create(:diagnostic_info)
  diagnostic_info.save!
  visit edit_admin_diagnostic_path(diagnostic_info)
  fill_in 'diagnostic_info_notes',    with: "test notes"
  click_button "Save"
  page.should have_content("Saved")
  page.should have_content("test notes")
end

1 个答案:

答案 0 :(得分:1)

你的问题确实是提交标签。 它应该像这样使用:

submit_tag("display value", html_options)

其中 html_options 是包含以下内容的哈希:

{ class: 'my_class', disabled: true }

因此,请更改您的submit_tag,它会起作用。 您的观点应如下所示:

= form_for [:admin, @diagnostic], url: admin_diagnostic_path(@diagnostic), html: {method: :put} do |f|
  .field
    = label_tag :notes
    = f.text_field "notes"
    = submit_tag @diagnostic.data["Save"], class: "save"

.field
    = link_to 'show', admin_diagnostics_path

修改: 我想你甚至可以在Rails中缩短你的观点:

= form_for [:admin, @diagnostic] do |f|
  .field
    = f.label{ for: :notes }
    = f.text_field "notes"
    = f.submit @diagnostic.data["Save"], class: "save"
  .field
    = link_to 'show', admin_diagnostics_path

原因是,如果您坚持标准的CRUD操作和命名约定,form_for会自动生成正确的路径和方法

结束编辑

不确定@diagnostic变量中有什么,但我想你想让按钮显示其中的内容?