小编skw*_*eth的帖子

Rails - 一种形式到两种模型

我正在 Rails(版本 4.2.5)中构建一个表单来收集有关商店的基本信息,我希望该表单将数据提交给两个单独的模型 - 一个称为 Store,它收集有关商店的信息,另一个称为 Address ,它只保存地址信息。我在 Stack 和其他地方看到过这个问题,但我对 Rails 很陌生,可以使用更多的分步指导。(另外,我知道 Rails geocoder gem,但我不想在这个项目中使用它,尽管我正在收集地址和经纬度信息)

首先,这是我的 Store 和 Address 模型...

class Store < ActiveRecord::Base
  belongs_to :user
  belongs_to :store_type
  has_one :address
end

class Address < ActiveRecord::Base
  belongs_to :store
end
Run Code Online (Sandbox Code Playgroud)

和我的 StoresController...

class StoresController < ApplicationController

    def new
        @store = Store.new
        @storeType = StoreType.all
    end

    def create
        @store = Store.new(store_params)
        @store.user = current_user

        if @store.save
            flash[:notice] = "New store created"
            redirect_to root_path
        else
            #ERROR STUFF
        end
    end

    private
    def store_params
        params.require(:store).permit(:user_id, :store_type_id, …
Run Code Online (Sandbox Code Playgroud)

forms model ruby-on-rails ruby-on-rails-4

5
推荐指数
1
解决办法
3491
查看次数

Rails Activerecord/Postgres时间格式

我正在使用Postgres数据库处理Rails项目.对于我的一个模型,我有一个时间列,称为(巧妙)时间.当我创建模型时,我将此列的数据类型设置为"时间",并且(可能不正确)理解此数据类型仅用于存储时间,没有日期.

t.time :time
Run Code Online (Sandbox Code Playgroud)

但是,当我向模型提交数据时,时间是正确的,但前缀是错误的日期:

time: "2000-01-01 16:57:19"
Run Code Online (Sandbox Code Playgroud)

我只想让列存储时间(如'16:57:19').'time'是正确的数据类型吗?还是有其他方法我应该处理这个问题?

非常感谢你.

postgresql time activerecord ruby-on-rails rails-activerecord

5
推荐指数
1
解决办法
2357
查看次数

Node/Express中的Sequelize - '没有这样的表:main.User`错误

我正在尝试使用Sequelize构建一个简单的Node/Express应用程序,但是当我尝试在我的关系数据库中创建一个新记录时,我收到错误Unhandled rejection SequelizeDatabaseError: SQLITE_ERROR: no such table: main.User.基本上,我在Users表中创建一个用户,然后尝试在表中创建一个相关的地址Addresses- 用户已成功创建但在创建地址时失败并出现此错误...其中是main从表名中获取前缀?(下面的完整错误读数)...

首先,这是我的计划的简要介绍......

  • 我的Sequelize版本是Sequelize [Node: 6.8.1, CLI: 2.4.0, ORM: 3.29.0],我使用Sequelize CLI命令sequelize init来设置我项目的这一部分.

  • 我使用SQLite3进行本地开发,并且config/config.json我将开发数据库定义为

    "development": {
        "storage": "dev.sqlite",
        "dialect": "sqlite"
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 我的用户迁移:

    'use strict';
        module.exports = {
            up: function(queryInterface, Sequelize) {
                return queryInterface.createTable('Users', {
                    id: {
                        allowNull: false,
                        autoIncrement: true,
                        primaryKey: true,
                        type: Sequelize.INTEGER
                    },
                    first_name: {
                        type: Sequelize.STRING
                    },
                    last_name: {
                        type: Sequelize.STRING
                    },
                    createdAt: {
                        allowNull: false,
                        type: …
    Run Code Online (Sandbox Code Playgroud)

sqlite node.js express sequelize.js sequelize-cli

5
推荐指数
1
解决办法
3405
查看次数

反应-使用JavaScript设置输入值不会触发'onChange'

在我的React应用程序(版本15.4.2)中,我正在使用JavaScript更新文本输入字段的值-但是,我有一个onChange与输入字段相关联的事件监听器,并且更改输入字段的值不会触发处理程序(当然,可以在输入字段中进行老式输入),尽管该字段的内容已正确更新。

constructor(props) {
    super(props);
    this.onChange = this.onChange.bind(this);
}

onChange(event){
    let attribute = event.target.name;
    let updatedGroup = this.state.group;
    updatedGroup[attribute] = event.target.value;
    this.setState({group: updatedGroup});
}

addMember(memberId) {
    let inputField = document.getElementById("members");
    let inputValues = inputField.value.split(",");
    inputField.value = [...inputValues, memberId];
}

render(){
    <input type="text" id="members" name="members" value={this.state.group.members} onChange={this.onChange} />
}
Run Code Online (Sandbox Code Playgroud)

因此,当addMember()被调用时(通过在子组件中单击按钮),输入字段本身的内容会正确更新,但是不会调用onChange并因此不会更新状态,等等。

有没有办法以编程方式设置输入字段的值并触发onChange

javascript reactjs

5
推荐指数
1
解决办法
1281
查看次数

Elixir - 在特殊情况下不做任何事情

caseElixir的一份声明中,如果在case声明中满足特定条件,是否可以不采取任何措施?或者必须总是返回一些东西?

为了说明,这里是我正在研究的凤凰应用程序的片段:

Enum.map(record_params, fn(record_id) ->
    record = Repo.get!(Record, record_id)
    case Repo.update(record) do
        {:ok, struct} ->
            # I DON'T REALLY NEED ANYTHING TO HAPPEN HERE... BUT I HAVE TO HAVE A CLAUSE TO MATCH WHEN THE UPDATE RETURNS {:ok, struct}
            IO.inspect struct
        {:error, changeset} ->
            errors = parse_errors(changeset)
            IO.inspect errors
            json(conn |> put_status(400), %{status: "error", message: "There was a problem updating this record.", errors: errors})
                end
end)
Run Code Online (Sandbox Code Playgroud)

如果record更新了,我需要知道是否有错误,获取有关它的信息,并将其返回给客户端,因此需要case声明...但如果记录已被删除,我真的不需要做任何事情更新成功 - {:ok, struct}.由于这些更新发生在一个内部Enum.map() …

elixir

5
推荐指数
2
解决办法
3605
查看次数

Phoenix / Ecto-查询值为零的单个记录

在我的Phoenix应用程序中,我想get_by()对单个记录运行Ecto查询-但是,我要搜索的字段之一应评估为nil,但是Phoenix / Ecto禁止nil用作比较运算符。

这是我理想的(但失败的)查询:

target_record = Repo.get_by(Records, %{user_id: user_id, deleted_at: nil})
Run Code Online (Sandbox Code Playgroud)

我已经能够查询许多记录的查询中nil使用的字段is_nil(field_name),例如:

target_records = from(r in Records,
                        where: r.user_id == ^user_id,
                        where: is_nil(r.deleted_at))
                        |> Repo.all()
Run Code Online (Sandbox Code Playgroud)

但是我不愿意在当前任务中使用它,因为这将返回一个列表...我的Records表可以有很多相同的条目,user_id但是其中只有一个条目可以使用deleted_at: nil,所以我不需要找回一项的列表,然后将其转换为地图...

我的意思是,我可以做到,但看起来并不干净。

如何get_by安排查询,以便nil可以包含一个值?

ecto phoenix-framework

4
推荐指数
1
解决办法
2402
查看次数

React/Express - 调用renderToString()时出现'意外的标记<'

我正在为我的React/Express应用程序设置服务器端呈现,但是我遇到了与该react-dom/server renderToString()方法调用相关的语法错误.我正在松散地遵循这个教程 - http://crypt.codemancers.com/posts/2016-09-16-react-server-side-rendering/

index.js (Express app root):

'use strict'
require('babel-register')({
    presets: ['es2015', 'react']
});

const express = require('express')
const path = require('path')
const app = express()
const React = require('react')
const reactDomServer = require('react-dom/server')
const routes = require('./src/routes.jsx')
const reactRouter = require('react-router')
let { match, RouterContext } = reactRouter

app.get('*', (req, res) => {
    match({ routes: routes, location: req.url }, (err, redirect, props) => {
        const appHtml = reactDomServer.renderToString(<RouterContext {...props}/>)
        res.send(renderPage(appHtml))
    })
})
Run Code Online (Sandbox Code Playgroud)

但是,这会导致错误:

const appHtml = …
Run Code Online (Sandbox Code Playgroud)

javascript express reactjs react-router

4
推荐指数
2
解决办法
3980
查看次数

Rails respond_to 重定向不起作用

我的 Rails 应用程序中的 create 控制器中的 respond_to 块没有在成功保存时重定向...我确定这是一个简单的解决方案,但我对 Rails 缺乏经验,这是我第一次遇到这个问题。

表单设置为:remote => true,控制器如下...

def create
    @store = current_user.stores.new(store_params)

    respond_to do |format|
        if @store.save
            format.html { redirect_to root_path }
        else
            format.html { flash[:alert] = "Save failed! #{@store.errors.full_messages.join(";")}" 
            render "new" }
            format.js {}
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

当我谈到这个主题时,条件的else部分的代码也不会运行,除了format.js {},它确实运行了我的 create.js.erb 文件中的代码(暂时是一个警报)。

我正在使用 Rails 4.2.5。有人可以帮助我理解为什么重定向和警报不起作用吗?谢谢!

编辑以显示解决方案 根据 Rich 的回答,这是我提出的解决方案:

控制器:

def create
    @store = current_user.stores.new(store_params)

    flash.now[:alert] = "Save failed! #{@store.errors.full_messages.join(";")}" unless @store.save

    respond_to do |format|
        format.js
    end

    if @store.save
        flash[:notice] = …
Run Code Online (Sandbox Code Playgroud)

ajax ruby-on-rails respond-to

3
推荐指数
1
解决办法
3793
查看次数

Postgres - 从Mac终端列出数据库

我对MySQL很有经验,但我刚开始使用Postgres - 从Mac上的终端,如何使用psql命令查看现有的Postgres数据库列表?

我检查了文档,我看到这个问题出现在这里 - https://dba.stackexchange.com/questions/1285/how-do-i-list-all-databases-and-tables-using-psql,其中接受的解决方案就是简单地输入psql \l,这对我来说很有意义......然而,当我尝试这个时,我得到了错误

psql: FATAL: database "l" does not exist

但我登录到Postgres - 如果我输入psql DATABASE_NAME,没问题,我进入数据库...这对我来说是一个问题,因为我记不起我想要处理的数据库的名称.我进入另一个表(我记得的名称),然后使用该\l命令查看我的数据库并连接到我需要的数据库,但我更愿意只是能够看到列表而无需先连接到一个数据库.我怎样才能做到这一点?

postgresql

2
推荐指数
1
解决办法
5468
查看次数

Angular2 - 插值对象是'undefined'但是console.log()有效

我正在研究一个非常简单的Angular2应用程序,但是我遇到了一个问题,其中插值组件对象由浏览器评估undefined,尽管我能够console.log(this)在组件中查看值,尽管下面的值为'刚才被评估'注意.

对于上下文,我已经使用Angular2命令行工具启动了我的应用程序,但我正在松散地遵循Angular2的"英雄之旅"教程(它使用压缩的快速入门包来组装基本文件)...

导致问题的模板是person-detail.component.html,我非常简单地:

<div>Welcome, {{ person.name }}</div>
Run Code Online (Sandbox Code Playgroud)

这是相关的 person-detail.component.ts

import { Component, Input, OnInit } from '@angular/core';
import { ActivatedRoute, Params }   from '@angular/router';
import { Location }                 from '@angular/common';
import 'rxjs/add/operator/switchMap';
import { PersonService } from './person.service';
import { Person } from './person';

@Component({
  selector: 'person-details',
  templateUrl: './person-details.component.html'
})

export class PersonDetailsComponent implements OnInit {

  @Input() person: Person;
   constructor(
    private personService: PersonService,
    private route: ActivatedRoute,
    private location: Location
  ) {};

  ngOnInit(): void { …
Run Code Online (Sandbox Code Playgroud)

angular

2
推荐指数
1
解决办法
2745
查看次数