我正在开发一个非常简单的CRUD资产管理应用程序,我想使用Ransack。我认为我在视图和控制器中正确设置了这个设置,但每次查看索引视图时我都会得到异常:
undefined method
assets_path'代表#<#:0x007fa5f353e9e0>`
以下是我的观点:
index.html.erb
<div class="pull-right">
<%= search_form_for @q do |f| %>
<%= f.search_field :asset_name_cont, placeholder: 'Search...' %>
<% end %>
<table class="table table-striped">
<thead>
<tr>
<th>Asset Number</th>
<th>Asset Name</th>
<th>Serial Number</th>
<th>Model</th>
<th>Manufacturer</th>
<th>Asset Type</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<% @assets.each do |a| %>
<tr>
<td><%= a.asset_number %></td>
<td><%= a.asset_name %></td>
<td><%= a.asset_serial %></td>
<td><%= a.asset_model %></td>
<td><%= a.asset_manuf %></td>
<td><%= a.asset_type.try(:name) %></td>
<td><%= link_to 'View', inventory_path(a), :class => 'btn btn-mini btn-info' %> <%= link_to 'Edit', edit_inventory_path(a), :class => 'btn btn-mini btn-warning' %></td>
</tr>
</tbody>
<% end %>
<%= will_paginate @assets %>
这是我的控制器摘录: 的 inventory_controller.rb
def index
@q = Asset.ransack(params[:q])
@assets = @q.result.order("asset_number ASC").paginate(:page => params[:page], :per_page => 10)
end
这是我的模型(带有注释的字段)
asset.rb
id :integer not null, primary key
asset_number :string
asset_shortname :string
asset_name :string
asset_desc :text
asset_serial :string
asset_model :string
asset_manuf :string
asset_type_id :integer
created_at :datetime not null
updated_at :datetime not null
asset_location :string
class Asset < ActiveRecord::Base
extend FriendlyId
friendly_id :asset_name, use: :slugged
validates :asset_name, :asset_serial, :asset_type_id, :asset_model, :asset_manuf, :presence => true
belongs_to :asset_type
end
我认为我的控制器接线良好,我之前遇到过表单和路由问题,因为有一个名为assets
的控制器,这是一个问题,作为Rails 4.xx中的保留名称,所以我重建了控制器作为inventory
并从内部调用Asset
类。
我的问题是,search_form_for
字段用于查看Asset
asset_name
模型的search_field
字段,但是当我按照我的布局编写视图时,我不断得到该路径错误
有没有办法将不同的路径传递给Ransack class Hello
def foo
p "Foo"
end
def bar
p "Bar"
end
def loop_methods
self.class.instance_methods(false)
.each{ |m| m == __method__ || self.send(m) }
end
end
Hello.new.loop_methods
方法,以便我可以通过似乎是约定的问题?
如果您需要更多信息或我的问题不够明确,请随时编辑或询问更多信息。谢谢大家!
答案 0 :(得分:2)
好的,我想出来了。与我在其他表单中破坏Rails命名约定时遇到的问题类似,我必须在search_form_for
帮助程序方法中传递url和方法。它正在运作!
以下是我对搜索的看法:
<%= search_form_for(@q, url: "/inventory", method: :get) do |f| %>
<%= f.search_field :asset_name_cont, placeholder: 'Search...' %>
<% end %>