我正在 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) 我正在使用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
我正在尝试使用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)在我的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?
在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() …
在我的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可以包含一个值?
我正在为我的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) 我的 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) 我对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命令查看我的数据库并连接到我需要的数据库,但我更愿意只是能够看到列表而无需先连接到一个数据库.我怎样才能做到这一点?
我正在研究一个非常简单的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) express ×2
javascript ×2
postgresql ×2
reactjs ×2
activerecord ×1
ajax ×1
angular ×1
ecto ×1
elixir ×1
forms ×1
model ×1
node.js ×1
react-router ×1
respond-to ×1
sequelize.js ×1
sqlite ×1
time ×1