由于我更新了几个宝石,所有测试都失败并出现错误:
ActionView :: Template :: Error:未声明资产在生产中预编译.
添加
Rails.application.config.assets.precompile += %w( favicons/manifest.json.erb )
到config/initializers/assets.rb
和重新启动服务器应用程序/视图/布局/ _faviconsheader.html.erb:14:在
_app_views_layouts__faviconsheader_html_erb__1320
应用程序/视图/布局/ application.html.erb:21:在
_app_views_layouts_application_html_erb__4340
该错误似乎是指_faviconsheader.html.erb
包含该行的部分:
<%= content_tag :link, nil, rel: :manifest, href: image_path("favicons/manifest.json.erb") %>
Run Code Online (Sandbox Code Playgroud)
这个部分载入application.html.erb
:<%= render partial: 'layouts/faviconsheader' %>
.
知道是什么导致了这个错误,该怎么办?在gem更新之前,所有测试都通过了.
我使用Rails 4.2.5.其中一个更新的宝石是sprockets
(更新的链轮到版本3.5.2).我在github上读到有关链轮4出现问题的内容,但我没有使用版本4.
PS即使我添加Rails.application.config.assets.precompile += %w( favicons/manifest.json.erb )
到config/initializers/assets.rb
错误仍然存在.但即使这样可行,我也想了解为什么会出现这个问题,除了更新一些宝石之外没有任何变化.
我第一次在 Gitlab.com 上设置 SSH 密钥。我一直在验证您是否可以连接:ssh -T git@gitlab.example.com
。
你gitlab.example.com
应该用你的 Gitlab 实例 url 替换,但我不断收到“ssh:无法解析主机名:名称或服务未知”。
我正在使用 Gitlab SaaS 解决方案,并尝试了各种格式,例如:
ssh -T git@gitlab.com/my-workspace-name
ssh -T git@gitlab.com:my-workspace-name
ssh -T git@gitlab.com/my-workspace-name/project-name
Run Code Online (Sandbox Code Playgroud)
应该有效的正确格式是什么?
我正在测试以下方法:
def destroy
if @article.destroy
render json nothing: true, message: "removed", status: :ok
else
render json: @article, message: "Failed to remove", status: :bad_request
end
end
Run Code Online (Sandbox Code Playgroud)
该render json nothing
行生成错误
#Api :: V1 :: ArticlesController:0x000000074f6148的未定义方法`json'
改变线条render json: message: "removed", status: :ok
没有区别.怎么没有渲染?
更新:我尝试了下面的代码,删除后回复No response received
,而我期待的消息.
def destroy
if @article.destroy
respond_to do |format|
format.json { render nothing: true, message: "removed", status: :ok }
end
else
render json: @article, message: "Failed to remove", status: :bad_request
end
end
Run Code Online (Sandbox Code Playgroud) 我正在使用Rails 4.2.3并尝试自定义404错误页面public/404.html
.如何包含资产管道中的图像?
如何构建动态自定义错误页面有一个很好的帖子.但是,如上所述,它需要对设置进行大量更改,作为初学者,我还没准备好.我想做的就是在我的404页面中包含2个资产管道中的图像.是否有捷径可寻?
我正在使用在线生成器(http://realfavicongenerator.net但其他生成器,例如 www.favicon-generator.org 工作相同)来实现收藏夹图标。生成器提供了近 30 个文件(用于 android、苹果、不同大小等的图像),这就是为什么我将所有这些文件放在资产管道 ( assets/images/favicons/
) 而不是公共文件夹中(否则会变得如此混乱)。
文件中包含一个 xml 文件browserconfig.xml
和一个 json 文件manifest.json
(不确定它们的确切用途)。在标题中,我使用以下方法加载两个文件:
<%= content_tag :meta, nil, content: image_path("favicons/browserconfig.xml"), name: 'msapplication-config' %>
<%= content_tag :link, nil, href: image_path("favicons/manifest.json"), rel: :manifest %>
Run Code Online (Sandbox Code Playgroud)
用image_path
这种方式可以吗?(即使它们不是图像,我已将所有图标文件放在一个文件夹中assets/images/favicons
)
此外,xml 和 json 文件都包含对现在位于资产管道中的网站图标图像(见下文)的引用。所以在目前的形式下,这些引用失败了。如何引用 xml 和 json 文件中的图像?
浏览器配置.xml:
<?xml version="1.0" encoding="utf-8"?>
<browserconfig>
<msapplication>
<tile>
<square70x70logo src="/mstile-70x70.png"/>
<square150x150logo src="/mstile-150x150.png"/>
<square310x310logo src="/mstile-310x310.png"/>
<wide310x150logo src="/mstile-310x150.png"/>
<TileColor>#fff8dc</TileColor>
</tile>
</msapplication>
</browserconfig>
Run Code Online (Sandbox Code Playgroud)
清单.json:
{
"name": "AppName",
"icons": [
{ …
Run Code Online (Sandbox Code Playgroud) 我有一个帮助文件,app/helpers/sessions_helper.rb
其中包含一个my_preference
返回当前登录用户首选项的方法.我想在集成测试中访问该方法.例如,我可以get user_path(my_preference)
在我的测试中使用.
在其他帖子中我读到这可能是通过包含require sessions_helper
在测试文件中,但我仍然得到错误NameError: undefined local variable or method 'my_preference'
.我究竟做错了什么?
require 'test_helper'
require 'sessions_helper'
class PreferencesTest < ActionDispatch::IntegrationTest
test "my test" do
...
get user_path(my_preference)
end
end
Run Code Online (Sandbox Code Playgroud) Organization
并Image
有一个1-to-1 relationship
.Image
有一个名为的列filename
,它存储文件的路径.我有一个包含在资产管道中的文件:app/assets/other/image.jpg
.播种时如何包含此文件的路径?
我试过我的种子文件:
@organization = ...
@organization.image.create!(filename: File.open('app/assets/other/image.jpg'))
# I also tried:
# @organization.image.create!(filename: 'app/assets/other/image.jpg')
Run Code Online (Sandbox Code Playgroud)
两者都生成错误:
NoMethodError: undefined method `create!' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)
我检查了debugger
并且可以确认它不是 @organization
零.
如何使这项工作并将文件的路径添加到Image
模型中?
更新:我尝试了以下内容:
@image = Image.create!(organization_id: @organization.id,
filename: 'app/assets/other/image.jpg')
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
image = @organization.build_image(filename: 'app/assets/other/image.jpg')
image.save
Run Code Online (Sandbox Code Playgroud)
播种后,两次尝试都会产生错误:
CarrierWave::FormNotMultipart: You tried to assign a String or a Pathname to an uploader, for security reasons, this is not allowed.
Run Code Online (Sandbox Code Playgroud) 我有一个变量,我相信该变量已使用 Redux 操作和化简器正确写入我的 Redux 存储。但由于某种原因,它永远不会成为 React 页面上 props 的一部分。根据下面的代码,可能是什么原因?我希望this.props.transactionDetails
并在代码块this.state.trans_status
中可用render
。Redux 存储对于其他变量/页面可以正常运行。
反应页面:
import { get_details } from "../../../appRedux/actions/transAction";
class DonePage extends Component {
constructor(props) {
super(props);
this.state = {
showLoader: true,
transactionDetails: "",
trans_status: "",
};
}
async componentDidMount() {
await this.props.get_details('abc1234');
}
componentDidUpdate(prevProps, prevState) {
if (prevProps.transactionDetails !== this.props.transactionDetails) {
console.log("Inside ComponentDidUpdate");
// It never arrives here, perhaps suggesting the prop is never created in the store?
this.setState({
trans_status: this.props.transactionDetails.trans_status,
});
}
}
render() …
Run Code Online (Sandbox Code Playgroud) 如何在其中构建带有hashtag(#
)的路由?我创造了这条路线
get 'authors/#/:id' => 'authors#show
Run Code Online (Sandbox Code Playgroud)
但这会产生路线
GET /authors/%23/:id(.:format)
Run Code Online (Sandbox Code Playgroud)
所以它应该在%23
哪里#
.
我正在尝试嵌入YouTube电影,并且希望默认情况下启用字幕。
我知道从https://developers.google.com/youtube/player_parameters#cc_load_policy应该使用cc_load_policy=1
。
我使用下面的html代码,但似乎无法正常工作。也就是说,它会关闭字幕(您可以手动打开字幕,因此视频中确实有字幕)。我究竟做错了什么?
我尝试了以下两种选择:
<iframe src="https://www.youtube-nocookie.com/embed/xxxxxx?rel=0&&showinfo=0&cc_load_policy=1" frameborder="0" allowfullscreen></iframe>
<iframe src="https://www.youtube-nocookie.com/embed/xxxxxx?rel=0&&showinfo=0" cc_load_policy="1" frameborder="0" allowfullscreen></iframe>
Run Code Online (Sandbox Code Playgroud) 对于我从另一位开发人员继承的 React 应用程序,其中一个页面包括:
import { getLogUser } from "../../appRedux/actions/authAction";
constructor(props) {
super(props);
this.state = {
user: null,
};
}
UNSAFE_componentWillMount() {
let user = getLogUser();
this.setState({ user });
// user state is used inside the render part
}
componentDidMount = () => {
let { username } = getLogUser();
// ... username is used inside some logic within the componentDidMount method.
Run Code Online (Sandbox Code Playgroud)
我想摆脱这个UNSAFE_componentWillMount
方法。
UNSAFE_componentWillMount
如果我user: getLogUser()
在内部使用,我可以移除该部件吗 constructor
?let { username } = getLogUser();
inside
替换为 …我正在将 gem active_model_serializers从版本 0.9.5 更新到 0.10.1。对于 0.9.5 版本,下面的代码有效。
控制器:
def create
...
render json: @dia, app_rights: app_rights(@dia)
end
Run Code Online (Sandbox Code Playgroud)
序列化器:
class Api::V1::SerializerWithSessionMetadata < ActiveModel::Serializer
attributes :app_rights
def app_rights
serialization_options[:app_rights]
end
end
Run Code Online (Sandbox Code Playgroud)
该方法serialization_options
在 0.10.1 版本中已被弃用。
instance_options
。options
:“instance_options 仅在 master 分支中可用,在当前 RC 中不可用。在当前 RC 中,您必须使用 options 代替”。@options
和的建议@instance_options
。我尝试serialization_options
用上述所有选项进行替换。但是,在所有情况下,更新 gem 后,生成的 json 都不包含app_rights
. 我究竟做错了什么?
我正在尝试在编辑视图中使用以下代码将布尔值包含在下拉框中:
<div class="col-md-8">
<%= f.select :match, options_for_select([['On', true], ['Off', false]]), class: 'form-control input-md' %>
</div>
Run Code Online (Sandbox Code Playgroud)
但是我遇到了两个问题:
1.它没有显示正确的值.即使用户的价值是false
,它仍然显示On
.
2.它没有实现样式.检查员显示它按如下方式实现:
<div class="col-md-8">
<select name="user[match]" id="user_match">
<option value="true">On</option>
<option value="false">Off</option>
</select>
</div>
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?