2010-11-08 113 views

回答

1

的devise_inevitable引擎定义了两个视图文件和一个控制器。您很可能不需要对其定义的控制器进行任何修改。发送邀请给用户的形式被定义here,你会覆盖视图的渲染,像这样:

#app/views/invitations/new.html.erb 
<% form_for resource_name, resource, :url=> invitation_path(resource_name) do |f| %> 
    <!-- Totally sweet new user invitation code goes here --> 
<% end %> 

包含代码供用户点击电子邮件中的链接后完成注册的形式here和你会重写它的渲染,像这样:

#app/views/invitations/edit.html.erb 
<% form_for resource_name, resource, :url=> invitation_path(resource_name), :html=>{:method => :put } do |f| %> 
    <!-- Totally sweet new user registration information goes here. --> 
<% end %> 

第一种观点是什么将实际创建的资源对象,所以这是更可能的,你会想是树立了一个消息用户看到,他们也被邀请参加什么项目。您可能还想覆盖app/views/devise_mailer/invitation.html.erb以更改用户收到的电子邮件。

为了覆盖invitations controller你需要这样做:

#app/controllers/devise/invitations_controller.rb 
class Devise::InvitationsController < ApplicationController 
    def create 
    #totally rad create stuff here. 
    end 
end 

设计及其扩展都是Rails的引擎,因此请求将首先寻找一个合适的控制器/模型/视图/帮手将文件存储在您的应用程序目录中,然后存储在供应商/ gems中,然后最终在定义引擎的gem目录中。

+0

谢谢帕特里克这是非常有用的,但我卡住的地方,我可以覆盖Invitable控制器吗?我想要做这样的事情:def create self.resource = resource_class.invite!(params [resource_name]) if resource.errors.empty? #set_flash_message:notice,:send_instructions render:js =>“alert('Hello Rails');” 结束 – AnApprentice 2010-11-08 22:53:32

+0

我想要做的是创建一个模式对话框,允许用户邀请其他用户并添加一条消息。我想让DEF CREATE控制器用JS回应,所以我可以更新对话框,但是我无法正常工作。想法? – AnApprentice 2010-11-08 22:54:45

+0

我在上面的答案中引入了关于覆盖控制器的信息。请记住,这可能会损害您未来升级这款宝石的能力。确保记录你所做的事情。 – 2010-11-08 23:36:25

相关问题