Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails允许用户设置默认值_Ruby On Rails_Ruby_Default - Fatal编程技术网

Ruby on rails Rails允许用户设置默认值

Ruby on rails Rails允许用户设置默认值,ruby-on-rails,ruby,default,Ruby On Rails,Ruby,Default,我正在使用一个允许用户创建项目的Rails应用程序。在这些项目中,用户可以创建列表。我试图弄清楚如何允许用户从项目索引页面选择他们的“默认工作项目”。这将在整个应用程序中传播,只显示与当前项目关联的列表。制作这样的内容的最佳方法是什么。在用户表中使用默认项目id创建一个数据库字段并进行设置 在模型集上: def default_project return projects.find_by_id(default_project_id) if default_project_id fa

我正在使用一个允许用户创建项目的Rails应用程序。在这些项目中,用户可以创建列表。我试图弄清楚如何允许用户从项目索引页面选择他们的“默认工作项目”。这将在整个应用程序中传播,只显示与当前项目关联的列表。制作这样的内容的最佳方法是什么。

用户
表中使用
默认项目id
创建一个数据库字段并进行设置

在模型集上:

def default_project
   return projects.find_by_id(default_project_id) if default_project_id
   false
end
然后,你可以用这样的方法:

lists = user.default_project ? user.default_project.lists : user.lists

使用
default\u project\u id
Users
表中创建一个数据库字段并进行设置

在模型集上:

def default_project
   return projects.find_by_id(default_project_id) if default_project_id
   false
end
然后,你可以用这样的方法:

lists = user.default_project ? user.default_project.lists : user.lists

通过将
default\u working\u project\u id
字段添加到用户表中,可以轻松实现这一点

然后在控制器索引集中:

@default_working_project = current_user.default_working_project
在用户模型中添加:

belongs_to :default_working_project, class_name: Project, foreign_key: :default_working_project_id
您可以创建自己的操作。在路由文件中:

resources :projects do
  member do
    get 'set_default'
  end
end
在您的
项目\u控制器中

def set_default
  project.find params[:id]
  current_user.default_working_project_id = project.id
  respond_to do |format|
    if current_user.save
      format.html { redirect_to projects_path } 
    else
      format.html { render 'index', notice: "your error message" }
    end
  end
end
def update
    @project = Project.find(params[:id])
    if @project.update_attributes(project_params)
        respond_to do |format|
            format.html { redirect_to project_page } # this will run when you update project from edit page in form without 'remote: true'
            format.js # this will run if you update project with 'remote: true' form
        end
    end
end
在您的视图中,只需添加

link_to 'set default',  set_default_project_path(project.id)
已更新

要从用户中删除当前默认项目id,请执行以下操作:

您可以使用一些方法来实现这一点,例如:

在项目模型中

如果项目属于用户,请尝试此操作

def is_a_current_project?  
  self.id == self.user.default_working_project_id  
end  
然后在销毁后创建一个
:删除当前项目关系
回调方法

对于方法,我建议将其添加到您的私有方法中:

def remove_current_project_relation  
  if is_a_current_project?  
   self.user.default_working_project = nil  
  end  
end

通过将
default\u working\u project\u id
字段添加到用户表中,可以轻松实现这一点

然后在控制器索引集中:

@default_working_project = current_user.default_working_project
在用户模型中添加:

belongs_to :default_working_project, class_name: Project, foreign_key: :default_working_project_id
您可以创建自己的操作。在路由文件中:

resources :projects do
  member do
    get 'set_default'
  end
end
在您的
项目\u控制器中

def set_default
  project.find params[:id]
  current_user.default_working_project_id = project.id
  respond_to do |format|
    if current_user.save
      format.html { redirect_to projects_path } 
    else
      format.html { render 'index', notice: "your error message" }
    end
  end
end
def update
    @project = Project.find(params[:id])
    if @project.update_attributes(project_params)
        respond_to do |format|
            format.html { redirect_to project_page } # this will run when you update project from edit page in form without 'remote: true'
            format.js # this will run if you update project with 'remote: true' form
        end
    end
end
在您的视图中,只需添加

link_to 'set default',  set_default_project_path(project.id)
已更新

要从用户中删除当前默认项目id,请执行以下操作:

您可以使用一些方法来实现这一点,例如:

在项目模型中

如果项目属于用户,请尝试此操作

def is_a_current_project?  
  self.id == self.user.default_working_project_id  
end  
然后在销毁后创建一个
:删除当前项目关系
回调方法

对于方法,我建议将其添加到您的私有方法中:

def remove_current_project_relation  
  if is_a_current_project?  
   self.user.default_working_project = nil  
  end  
end

如果只有一个用户可以看到他的项目,而其他用户无法看到其他用户的项目,我的建议是:

  • projects
    表中,默认设置一个布尔值
    。将其添加到迁移中

  • 添加
    :是控制器中的
    def project\u参数的默认值

  • 在“项目索引”页面中,使用:

    <%= render @projects %>
    
  • 项目\u控制器中

    def set_default
      project.find params[:id]
      current_user.default_working_project_id = project.id
      respond_to do |format|
        if current_user.save
          format.html { redirect_to projects_path } 
        else
          format.html { render 'index', notice: "your error message" }
        end
      end
    end
    
    def update
        @project = Project.find(params[:id])
        if @project.update_attributes(project_params)
            respond_to do |format|
                format.html { redirect_to project_page } # this will run when you update project from edit page in form without 'remote: true'
                format.js # this will run if you update project with 'remote: true' form
            end
        end
    end
    
  • projects.coffee
    assets/javascripts
    文件夹中:

    $('input.project_default').change -> $(this).closest('form').submit()
    
  • views/projects
    文件夹中创建
    update.js.erb
    ,添加到其中:

    <%= form_for project, remote: true do |f| %>
        # some project data
        <%= f.check_box :is_default, class: 'project_default' %>
    <% end %>
    
    $('#edit_project_<%= @project.id %>').replaceWith("<%= j render 'project' %>");
    
  • 也许您需要根据您的任务对这些进行一些更改。此解决方案将通过JavaScript更新项目

    另外,最好在
    项目
    模型中添加一个方法,当用户将其他项目设置为默认项目时,该方法将使以前的默认项目不默认,以此类推


    当您需要使用默认项目中的列表时,可以在视图中使用
    default\u project.lists

    如果只有一个用户可以看到他的项目,而其他用户无法看到其他用户的项目,我的建议是:

  • projects
    表中,默认设置一个布尔值
    。将其添加到迁移中

  • 添加
    :是控制器中的
    def project\u参数的默认值

  • 在“项目索引”页面中,使用:

    <%= render @projects %>
    
  • 项目\u控制器中

    def set_default
      project.find params[:id]
      current_user.default_working_project_id = project.id
      respond_to do |format|
        if current_user.save
          format.html { redirect_to projects_path } 
        else
          format.html { render 'index', notice: "your error message" }
        end
      end
    end
    
    def update
        @project = Project.find(params[:id])
        if @project.update_attributes(project_params)
            respond_to do |format|
                format.html { redirect_to project_page } # this will run when you update project from edit page in form without 'remote: true'
                format.js # this will run if you update project with 'remote: true' form
            end
        end
    end
    
  • projects.coffee
    assets/javascripts
    文件夹中:

    $('input.project_default').change -> $(this).closest('form').submit()
    
  • views/projects
    文件夹中创建
    update.js.erb
    ,添加到其中:

    <%= form_for project, remote: true do |f| %>
        # some project data
        <%= f.check_box :is_default, class: 'project_default' %>
    <% end %>
    
    $('#edit_project_<%= @project.id %>').replaceWith("<%= j render 'project' %>");
    
  • 也许您需要根据您的任务对这些进行一些更改。此解决方案将通过JavaScript更新项目

    另外,最好在
    项目
    模型中添加一个方法,当用户将其他项目设置为默认项目时,该方法将使以前的默认项目不默认,以此类推


    当您需要使用默认项目中的列表时,您可以在视图中使用
    default\u project.lists

    很抱歉,我不清楚需要放置
    default\u project
    的模型以及放置
    lists=user.default\u项目的位置?user.default\u project.lists:user.lists
    行。很抱歉,我不清楚需要放置哪个型号的
    default\u项目
    ,以及将
    lists=user.default\u项目放置在哪里?user.default_project.lists:user.lists
    行。我尝试运行服务器时出错。我相信它来自协会:默认的工作项目。您是否可以确认这是正确的,或者我是否应该与我的项目模型建立关联?您是否已经在users表上创建了列?您不需要通过这样做在项目上设置关系。请尝试删除模型关联上的foreing_key::default_working_project_id。foreign_key拼写错误!啊!!!是的,我掉进了复制粘贴的洞。。。它现在似乎正在工作,但是如何调用它,以便我可以使用按钮设置默认值?我有一个表列出了项目,每个项目旁边都有一个“设置默认值”按钮。当我试图运行服务器时,我遇到了一个错误。我相信它来自协会:默认的工作项目。您是否可以确认这是正确的,或者我是否应该与我的项目模型建立关联?您是否已经在users表上创建了列?您不需要通过这样做在项目上设置关系。请尝试删除模型关联上的foreing_key::default_working_project_id。foreign_key拼写错误!啊!!!是的,我掉进了复制粘贴的洞。。。好像是w