大家好我来自旧学校使用rails 2.
实际上我正在使用rails 4而我正试图找到一种在控制器上创建方法而无需写入的方法
在使用的RAILS 2上:(仅需要在控制器上写下名称)
#controller
def report_a
end
def report_b
end
def report_c
end
...and whatever def
#ROUTES
map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'
在RAILS 4
#controller
def report_a
end
def report_b
end
def report_c
end
#ROUTES
match ':controller(/:action(/:id(.:format)))', :via => [:get, :post]
问题出在我创建这样的视图报告时:(views / reports / report_a.html.erb)
<%= form_tag :action=>"report_a" do %>
<% end %>
我收到此消息:
No route matches [GET] "/reports/report_a"
要解决此问题,并且执行Rails指令的工作方式如下:
#controller
def report_a
@users= User.search(params[:name])
end
def result_report_a
@users= User.search(params[:name])
end
#view/reports/report_a.html.erb
<%= form_tag :action=>"result_report_a" do %>
<% end %>
#routes.rb
get "reports#report_a"
post "reports#result_report_a"
get "reports#report_b"
post "reports#result_report_b"
get "reports#report_c"
post "reports#result_report_c"
我也找到了更好的方法:
#controller reports.rb
def search_report_a
report_a
render :report_a
end
def report_a
@users = User.where(:name=>params[:name])
end
def search_report_b
report_b
render :report_b
end
def report_b
@users = User.where(:address=>params[:address])
end
...
#Routes.rb
resources :users do
match 'search_report_a', :via => [:post,:get], :on => :collection
match 'search_report_b', :via => [:post,:get], :on => :collection
...
end
有没有其他方法来创建方法而不添加所有内部ROUTES.RB?
任何建议或唯一的方法是添加get和post?
想象一下你有几种方法的情况。
答案 0 :(得分:0)
Rails中的最佳方法是使用REST架构。您的控制器应该能够查看,创建,更新和销毁某些资源(当然,所有操作都不是必需的)。
例如:
def ReportsController
def index
# Actions to show links to all possible reports
end
def show
# Show report based on params
end
end
您的#show
方法可以通过检查来自GET请求的参数来显示任何报告(report_a,report_b等)。
并且您不需要在#show
方法中制作所有逻辑。将报告相关的逻辑放在某些服务对象中会更好。