如何在React组件中对Rails数据库对象进行排序

时间:2017-08-28 13:47:28

标签: javascript ruby-on-rails reactjs sorting

我的Rails数据库中的对象是React正在访问Component。 React将这些对象的两个属性显示为列表。我希望根据未显示的某个属性对该列表进行排序,但是可以通过Rails数据库使用React。该属性是" updated_at"值。理想情况下,我希望最新更新的对象显示在列表顶部。

React可通过此电话获取数据:

document.addEventListener('DOMContentLoaded', () => { 
  const node = document.getElementById('projects_data') 
  const data = JSON.parse(node.getAttribute('data')) 
  ReactDOM.render( 
    <Projects projects={data} />, 
    destination) 
  }) 

以下是我现在尝试对列表进行排序但没有成功的方法。没有错误,但它不起作用。目标是每次将名为Project的新对象添加到数据库时对列表进行重新排序。

addNewProject(project){ 
    const projects = update(this.state.projects, { $push: [project]}); 
    this.setState({ 
        projects: projects.sort(function(a,b){ 
            return new Date(a['updated_at']) - new Date(b['updated_at']); 
        }) 
    }); 
} 

这是列表组件:

export const Project_list = ({projects}) =>  
    <table className="table">                   
      <tbody> 
        <tr> 
          <th>Project Name</th> 
          <th>Project Status</th> 
          <th>Action</th> 
        </tr> 
        {projects.map(function(project){         
           return (                         
             <Project project={project} key={project.id} />        
                  ) 
        })} 
      </tbody> 
    </table> 

1 个答案:

答案 0 :(得分:0)

我用两个不同的修复解决了这个问题。

  1. 我向仪表板控制器添加了“订单”:
  2. @projects = @ current_user.projects.order(“updated_at DESC”)

    1. 我更改了“返回新日期(a ['updated_at']) - 新日期(b ['updated_at']);” 到

      返回新日期(b ['updated_at']) - 新日期(a ['updated_at']);