关于rails的ajax技术问题

cnenhui 发布于 2012/07/21 20:11
阅读 1K+
收藏 0

有个form表单,选择条件,然后点击查询,在controller层查询结果,结果查询后显示在rightmain的div块内。想用ajax技术做到局部刷新,使表单位置的值不变,只改变rightmain的地方。运行环境是ruby1.9.2,rails3.0.7,mysql6.0.

在controller里的代码

class FdinesearchController < ApplicationController
def fdinesearch
	t = Time.new
	time = t.to_a
	@thisyear = time[5]
	@agoyear = (time[5].to_i - 1).to_s
	@nextyear = (time[5].to_i + 1).to_s
	@sadines = DineAllowance.all
	@sadines = DineAllowance.find(:all,:conditions  => "da_ym = @thismonth  ")
	@cfs = Cofficient.all
	@cfs.each do |co|
		@sum  = co.work_dine_price
	end
	year = params[:year]
	month = params[:month]
	dname = params[:depart]
	yearmonth = year.to_s + "/" + month.to_s
	if params[:look]
		if dname == '0'
		@sadines = DineAllowance.find(:all,:conditions  => ["da_ym = ? ",yearmonth])	
		else
		#@sadines = DineAllowance.find(:all,:conditions  => ["da_ym = :yearmonth and dname = :dname",{:yearmonth => yearmonth,:dname => dname}])	
		end
	end
end
end

 html中的代码

<div id="select" style="padding-left:20px">
     <form name="form1" id="form1">
	   <select name="depart" id="select0">
				<option value='0'>全员</option>
					
		</select>
			&nbsp;&nbsp;
			<select name="year" id="select1">
				<option><%=@thisyear%></option>
				<option><%=@agoyear%></option>
				<option><%=@nextyear%></option>
			</select>
			<label for="select1">年</label>
			&nbsp;&nbsp;
			<select name="month" id="select2">
				<option value='6'>6</option>
				<option value='7'>7</option>

		</select>
			<label for="select2">月</label>
			&nbsp;&nbsp;
			<%= submit_tag '查看', :name => 'look', :remote => true%> 	
			
	  </form>
		
      </div>
	  <br>
      <div id="rightmain">
		<table id="customers" width="100%">
  	<tr>
  		<th width="10%">序号</th>
		<th width="10%">编号</th>

	</tr>       
<%@sadines.each do |sd|%>
	<td><%=sd.id%></td>
	<td><%=sd.peopleid%></td>

<%end%>
</table>
	    
      </div>

因为初次写rails,代码写的可能不是非常好

加载中
0
aiasfina
aiasfina

代码实在惨不忍睹...

既然html是erb,那么最好用helper中的form_for或form_tag方法构建表单。要实现ajax,只要加上:remote => true就可以了。至于服务端返回,如果ajax较少可以直接返回js让客户端执行。

controller中对应action的最后加上:

respond_to do |format|
  format.js
end

然后和erb差不多,在views中创建*.js.erb,内容就是普通的js代码,可以用<% %>插入ruby代码,之后就看你了。。。

aiasfina
aiasfina
这里有参考:http://chloerei.com/2012/04/21/rails-3-2-ajax-guide/
返回顶部
顶部