在 controller 里面,好像是可以 render 其他 action 的内容的。 我现在需要在 view 里面做同样的使用,而且还需要传一个 ID 过去。 试过了全路径名,试过了 :action,也试过了 :file = 全路径名 都报错,以前应该是搞过的,搞不清应该如何搞定了。
请帮帮忙。
What if you want to render a template from an entirely different controller from the one that contains the action code? You can also do that with render, which accepts the full path (relative to app/views) of the template to render. For example, if you’re running code in an AdminProductsController that lives in app/controllers/admin, you can render the results of an action to a template in app/views/products this way:
render 'products/show'
Rails knows that this view belongs to a different controller because of the embedded slash character in the string. If you want to be explicit, you can use the :template option (which was required on Rails 2.2 and earlier):
render :template => 'products/show'
我现在的问题是,render :file 和 :template 应该如何写参数呢? 之所以要在 view 里面 render 一部分内容,是因为这个模块需要反复的使用,而且可能会通过 jquery 直接 get,所以没有写成 _view 的形式。
朋友这些都是 guide 里写的很清楚的啊... render :edit render :action => :edit render 'edit' render 'edit.html.erb' render :action => 'edit' render :action => 'edit.html.erb' render 'books/edit' render 'books/edit.html.erb' render :template => 'books/edit' render :template => 'books/edit.html.erb' render '/path/to/rails/app/views/books/edit' render '/path/to/rails/app/views/books/edit.html.erb' render :file => '/path/to/rails/app/views/books/edit' render :file => '/path/to/rails/app/views/books/edit.html.erb'
#4 楼 @poshboytl 这里面没有任何一种是有参数的。我现在需要的是:render 'books/edit/23' 实在不行就不 render 了,直接试试 js 做 html 替换吧。
我希望在主从表的主表编辑界面里面,将从表一起处理掉。我已经使用 jquery-ui 的 dialog 实现了创建子表内容,现在需要在主表的_form 里面显示一下所有元素。而且,是在每次调整了子表的内容之后,都需要局部刷新。
ajax.。。。别用 render 什么的了,直接用 json,前台用 js 处理。或者直接弹个 window,redirect_to 到你从表的编辑页面(看起来傻一点,不过简单。)
看来只能直接 get json 回来自己画了。 另外还有一个问题,当主表的记录是新建的,这个时候从表如何处理呢? 使用的是 mongoid,从表是嵌入的。 我做过尝试: '''ruby event = Event.new event.new? #=> true aganda = event.agandas.new event.new? #=> true aganda.new? #=> true aganda.save aganda.new? => false event.new? => false ''' 要是将所有信息在主表提交之前都存在隐藏字段里面,感觉很烦啊。
Mongoid 我不是很清楚,不过大致也就是这个思路。可以用 callback 处理从表的保存,after_save 之类的。这个你应该@huacnlee 问问。
by the way, 那个代码的点是波浪号下面的那个点。。是这个 ```.
event = Event.new
event.new? #=> true
aganda = event.agandas.new
event.new? #=> true
aganda.new? #=> true
aganda.save
aganda.new? => false
event.new? => false
测试一下,不过 windows 笔记本键盘上好像没有看到那个波浪号啊,苹果键盘是有的。
这必须是你用的框架不对。如果只需要后台编辑的话,必须用 Django 的 Admin 搞定。比如像下面这样,10 分钟的事嘛。
events/models.py
from django.db import models
from django.utils.translation import ugettext_lazy as _
class Event(models.Model):
name = models.CharField(_('name'), max_length=255)
class Meta:
verbose_name = _('event')
verbose_name_plural = _('events')
class Meeting(models.Model):
event = models.ForeignKey(Event, related_name='meetings')
start_time = models.DateTimeField()
end_time = models.DateTimeField()
class Meta:
verbose_name = _('meeting')
verbose_name_plural = _('meetings')
ordering = ('start_time', )
events/admin.py
from django.contrib import admin
from events.models import Event, Meeting
class MeetingInline(admin.StackedInline):
model = Meeting
extra = 3
class EventAdmin(admin.ModelAdmin):
inlines = [MeetingInline]
admin.site.register(Event, EventAdmin)
admin.site.register(Meeting)
建议你看一下 Django 的 Tutorial,第二部分说的就是你现在这个问题。 https://docs.djangoproject.com/en/1.4/intro/tutorial02/
@poshboytl 求同存异么啊。分流一部分去 python 也挺好的,大家选择自己喜欢的么。我一开始也是用了 Python 和 Django 又和 Ruby on Rails 对比了一下才选择了我比较喜欢的 rails.要给人选择的权利嘛。
楼主需要整理思路,view 里面是不会回头去调用 action 的,但是 view 之间可以通过局部模板共用页面代码。
如果是普通的嵌套表单,可以通过 render :partial => 'sub_obejct/form'
的形式把别的资源的 _form.html.erb
内容嵌套过来。(还要注意局部模板里面的变量)
如果需要 ajax 处理嵌套表单,可以用 js.erb 方式,也是在 js.erb 里面 render :partial => 'sub_obejct/form'
,然后把渲染出来的局部模板 insert 到页面上。
如果调用 ajax 表单的地方不止一个,就要用 json api,把表单逻辑交给客户端。