我应该如何有条件地要求表格字段?我创建了一个自定义验证器,但是我传递给自定义验证器的条件变量是静态的并保持其初始值.我的自定义验证器应该如何获得更新的条件值?也许有一种方法可以用Validators.required而不是自定义验证器来做到这一点?
private foo: boolean = false;
private bar: boolean = true;
constructor(private _fb: FormBuilder) {
function conditionalRequired(...conditions: boolean[]) {
return (control: Control): { [s: string]: boolean } => {
let required: boolean = true;
for (var i = 0; i < conditions.length; i++) {
if (conditions[i] === false) {
required = false;
}
}
if (required && !control.value) {
return { required: true }
}
}
}
this.applyForm = _fb.group({
'firstName': ['', Validators.compose([
conditionalRequired(this.foo, !this.bar)
])],
...
}); …Run Code Online (Sandbox Code Playgroud) 我有一个使用Webpack和Babel的React项目.当我在办公室计算机上创建它时,Webpack运行正常.当我将项目克隆到我的个人计算机上时,它出现以下错误:
ERROR in ./react_minesweeper.jsx
Module build failed: Error: Couldn't find preset "es2015" relative to directory "/Users/louisstephancruz/Desktop"
at /Users/louisstephancruz/Desktop/w6d5/minesweeper/node_modules/babel-core/lib/transformation/file/options/option-manager.js:298:19
at Array.map (native)
at OptionManager.resolvePresets (/Users/louisstephancruz/Desktop/w6d5/minesweeper/node_modules/babel-core/lib/transformation/file/options/option-manager.js:269:20)
Run Code Online (Sandbox Code Playgroud)
这是我的webpack.config.js:
module.exports = {
entry: './react_minesweeper.jsx',
output: {
path: './',
filename: 'bundle.js',
},
module: {
loaders: [
{
test: [/\.jsx?$/, /\.js?$/],
exclude: /(node_modules)/,
loader: 'babel',
query: {
presets: ['es2015', 'react']
}
}
]
},
devtool: 'source-map',
resolve: {
extensions: ['', '.js', '.jsx' ]
}
};
Run Code Online (Sandbox Code Playgroud)
这是我的package.json:
{
"name": "minesweeper",
"version": "1.0.0",
"description": …Run Code Online (Sandbox Code Playgroud) 我想保存一个深层嵌套的表单.有三种不同的模型:应用程序,申请人和地址.地址是多态的,因为应用程序和申请人都可以拥有它们.这些是我发送的参数:
{"application"=>{
"loan_type"=>"purchase",
"loan_amount"=>2500000,
"borrower_attributes"=>{
"first_name"=>"Test",
"middle_name"=>"Test",
"last_name"=>"Test",
"birthdate"=>"01/01/1970",
"phone"=>"1231231234",
"email"=>"test@me.com",
"marital_status"=>"married",
"address_attributes"=>{
"street_address"=>"xxxx Mission Street",
"city"=>"San Francisco",
"state"=>"CA",
"zip"=>xxxxx
}
}
}}
Run Code Online (Sandbox Code Playgroud)
在我的请求中发送此消息时,我收到以下响应:
<Address id: nil, street_address: "1045 Mission Street", city: "San Francisco", state: "CA", zip: 94103, addressable_type: "Applicant", addressable_id: nil, created_at: nil, updated_at: nil>
Run Code Online (Sandbox Code Playgroud)
并出现以下错误消息:
@messages={:"borrower.address.addressable"=>["must exist"]}, @details={"borrower.address.addressable"=>[{:error=>:blank}]}
Run Code Online (Sandbox Code Playgroud)
为什么我不能设置嵌套属性?我需要修复什么来使其工作?
这是我的相关文件:
application.rb中
class Application < ApplicationRecord
before_save :assign_addresses!
belongs_to :borrower, class_name: 'Applicant'
belongs_to :coborrower, class_name: 'Applicant', optional: true
has_one :address, as: :addressable
accepts_nested_attributes_for :borrower
accepts_nested_attributes_for :coborrower
accepts_nested_attributes_for :address
end …Run Code Online (Sandbox Code Playgroud) 尝试访问sessions控制器的登录方法时出现以下错误:
JWT::DecodeError (Nil JSON web token):
lib/json_web_token.rb:11:in `decode'
app/helpers/sessions_helper.rb:15:in `current_user'
app/controllers/api/sessions_controller.rb:11:in `create'
Run Code Online (Sandbox Code Playgroud)
如果我render json: user在控制器响应中注释掉我的内容,那一切都很好,除了我需要与用户响应之外……为什么实际上是current_user通过的第11行调用的方法sessions_controller.rb。以下是相关代码:
lib / json_web_token.rb
require 'jwt'
class JsonWebToken
def self.encode(payload, expiration = 24.hours.from_now)
payload = payload.dup
payload['exp'] = expiration.to_i
JWT.encode(payload, Rails.application.secrets.json_web_token_secret)
end
def self.decode(token)
JWT.decode(token, Rails.application.secrets.json_web_token_secret).first
end
end
Run Code Online (Sandbox Code Playgroud)
sessions_helper.rb
require 'json_web_token'
module SessionsHelper
def create_session(user)
session[:user_id] = user.id
end
def current_user
auth_token = request.headers["Authorization"]
if auth_token
auth_token = auth_token.split(" ").last
begin
decoded_token = JsonWebToken.decode auth_token
rescue JWT::ExpiredSignature
return …Run Code Online (Sandbox Code Playgroud) 我正在使用Angular 2从我的Rails API服务器请求JSON.我的服务器设置为使用标头响应X-Total-Count: 10.我的服务器成功发送了这些标头:
但是当我尝试console.log(res.headers)http响应时,我只收到一个_headersMapwith Content-Type和Cache-Control:
这是我的Rack :: Cors配置:
config.middleware.insert_before 0, "Rack::Cors" do
allow do
origins '*'
resource '*', headers: :any, methods: [:get, :post, :options, :patch, :delete], expose: ['X-Total-Count']
end
end
Run Code Online (Sandbox Code Playgroud)
我在控制器中设置标头的方式:
def index
...
@posts = ...
response.headers['X-Total-Count'] = '10'
response.headers['Access-Control-Allow-Headers'] = 'X-Total-Count'
render json: @posts
end
Run Code Online (Sandbox Code Playgroud)
我怎样才能确保X-Total-Count出现在_headersMap?或者,我如何访问X-Total-Count价值响应?
我目前正在将音轨资源成功加载到我网站的"作品"页面.以下是我的"Works"控制器实现此目的的方法:
'use strict';
angular.module('appName')
.controller('WorksCtrl', function ($scope, $http, socket) {
$scope.works = [];
$http.get('/api/works').success(function(works) {
$scope.works = works;
socket.syncUpdates('work', $scope.works);
});
});
Run Code Online (Sandbox Code Playgroud)
但是,现在我需要在整个站点上全局访问我的曲目.我可以通过我的中心app.js中的工厂实现这一点,如果是这样,怎么做?