【问题标题】:Anyone have experience with devise_invitable?任何人都有使用 devise_invitable 的经验?
【发布时间】:2010-11-08 21:47:22
【问题描述】:

如何在控制器中添加使用 devise_invitable 的功能。我想在邀请中添加其他字段,例如 message、proeject_id,但不知道从哪里开始?

这里是 devise_invitable:link text

【问题讨论】:

    标签: ruby-on-rails devise


    【解决方案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
    

    Devise 及其扩展都是 Rails 引擎,所以请求会首先在你的 app 目录中查找合适的 controller/model/view/helper 文件,然后在 vendor/gems 中,最后在定义了引擎。

    【讨论】:

    • 谢谢帕特里克,这很有帮助,但我遇到了困难,我可以覆盖 Invitable 控制器吗?我想做这样的事情: def create self.resource = resource_class.invite!(params[resource_name]) if resource.errors.empty? #set_flash_message :notice, :send_instructions 渲染 :js => "alert('Hello Rails');"结束
    • 我要做的是创建一个模式对话框,允许用户邀请其他用户并添加消息。我希望 DEF CREATE 控制器用 JS 响应,所以我可以更新对话框,但我不能让它工作。想法?
    • 我在上面的答案中提供了有关覆盖控制器的信息。请记住,这可能会损害您将来升级此宝石的能力。确保记录您所做的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 2011-03-02
    • 2011-10-09
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多