我正在使用CarrierWave和Rails 3.1.我提交表单(尝试上传图像)时收到以下错误消息:
错误信息:
ActiveRecord::StatementInvalid in Admin::PostsController#create
NoMethodError: undefined method `name' for nil:NilClass: INSERT INTO "posts" ("body", "created_at", "draft", "image", "post_type", "title", "updated_at", "user_id") VALUES (?, ?, ?, ?, ?, ?, ?, ?)
Rails.root: /Users/aziz/Sandbox/ruby/rails/Tumblelog
Application Trace | Framework Trace | Full Trace
app/controllers/admin/posts_controller.rb:18:in `create'
Request
Parameters:
{"utf8"=>"?",
"authenticity_token"=>"za+zNRDGNCcujnCmO726cWCo2ze1rgaXv5bL17JGaek=",
"post"=>{"image"=>#<ActionDispatch::Http::UploadedFile:0x000001014aeff0 @original_filename="AzizLight.jpeg",
@content_type="image/jpeg",
@headers="Content-Disposition: form-data; name=\"post[image]\"; filename=\"AzizLight.jpeg\"\r\nContent-Type: image/jpeg\r\n",
@tempfile=#<File:/var/folders/ky/2ddtbt0d7k1g__2ctr8njcfc0000gn/T/RackMultipart20110918-21704-hp2ajt>>,
"draft"=>"0",
"user_id"=>"2",
"post_type"=>"image"},
"commit"=>"Post"}
Run Code Online (Sandbox Code Playgroud)
问题是我不知道它name来自哪里,我不知道哪个变量是零,所以我无法正常调试(我试着调试日志然后再问这里).第18行对应@post.save于以下控制器中的行:
PostsController:
# ...
def new
@post = Post.new
@form_html_options = (params[:post_type] == "image") …Run Code Online (Sandbox Code Playgroud) 我正在开发一个严重依赖子域的应用程序.它有一个嵌入在应用程序(模块)中的应用程序,它将作为管理应用程序的后端.我们把它命名为kong.
我在我的路线文件中有这个代码:
constraints :subdomain => "kong" do
scope :module => "kong", :as => "kong" do
resources :clients
end
end
Run Code Online (Sandbox Code Playgroud)
我如何测试这条路线,以便当我写下类似于下面的内容时,它从子域中获取,并且仅从子域中获取:
get :index
Run Code Online (Sandbox Code Playgroud) 我刚开始学习JavaScript.这是一种相当简单的编程语言,考虑到我在大学学习Java,我非常了解php,并且我已经玩过python和ruby.问题是要正确学习编程语言,我通常会创建一个项目.在javascript中,我只是不知道我可以创建什么样的项目 - 也就是说,一个非基于Web或与Web浏览器相关的项目.我可以创建javascript shell脚本吗?在网络浏览器旁边常用的javascript在哪里?
那么,有人可以给我一些想法吗?
我正在编写针对非极客,非程序员的PHP应用程序.我需要创建一个带有一堆"选项"的选项页面,然后将这些选项存储在某个地方.使用数据库应用程序(MySQL/PostgreSQL/SQLite)是不可能的,因为它需要比用户需要更多的配置(我不希望用户在他不想要时进行任何类型的配置) .因此,剩下的唯一解决方案是将配置写入配置文件.另一方面,我还希望配置文件是人类可读的,以防用户是极客并且他想直接编辑配置文件(或者如果他想通过SSH或任何原因远程编辑文件). ..)
以下是我发现的几种潜在解决方案:
使用JSON文件...
...从文件中检索数据,使用json_decode转换数据,将其输出为HTML,检索任何更改,使用json_encode进行编码等.您可以获得图片.有一些我不喜欢这种方法的东西,主要的一点是使用PHP编码的JSON数据不会格式化,很难编辑而不事先重新格式化.
使用XML文件
我不会描述这个解决方案,因为我也不喜欢它......我不知道如何使用XSLT并且不想学习......而且因为它是一个非常重要的解决方案,至少与JSON解决方案相比.如我错了请纠正我.
使用INI文件
我喜欢INI文件,真的很喜欢它们!我认为它们真的是最具可读性的,并且很难搞砸(即:语法错误).该解决方案的问题在于没有本地方式来编写/编辑ini文件.我发现了一个主题,显示了一个自定义方法来编写一个...如果我找不到更好的东西,这可能是我将采用的解决方案......
使用两个文件
最后的解决方案似乎与INI解决方案一样合理.事实上,我可以使用INI文件作为"输入"(用户可以根据需要编辑的文件)和XML/JSON文件作为输出(每次用户更改选项时将由PHP编辑的文件网络前端).此时,最佳解决方案是,如果用户直接编辑配置文件,则要求用户手动重新加载配置,以便"输出"文件始终是最新的.
我知道上面的解决方案都不是完美的,这就是我创建这个主题以寻求建议的原因.什么是最好的解决方案?也许(可能)我错过了另一个解决方案.
最后一件事:YAML不是一个有效的解决方案,因为如果你不熟悉它,它会更容易弄乱语法.PHP也不是解决方案,因为用PHP编辑PHP是一件痛苦的事.如果我想要检索一些配置但不通过Web前端直接编辑它,PHP只是一个很好的解决方案.
我想使用MiniTest :: Spec,我找到了一些资源来开始,但是他们都没有提到应该命名测试文件(或spec文件)的位置,以及应该放置它们的位置:
test/test_*spec/*_spec.rb那么我应该使用哪一个?
我希望Insert在一段时间(15秒)后自动使Vim离开模式.以下是我的内容.vimrc:
" set 'updatetime' to 15 seconds when in insert mode
au InsertEnter * let updaterestore = &updatetime | set updatetime=15000
au InsertLeave * let &updatetime = updaterestore
" automatically leave insert mode after 'updatetime' milliseconds of inaction
au CursorHoldI * stopinsert
Run Code Online (Sandbox Code Playgroud)
我在MacVim中使用此代码段,但它不起作用.当我进入Insert模式,而我什么都不做时,Vim在15秒后离开插入模式.但是,如果我按Enter或Backspace,或者如果我Insert使用o/ 进入模式O,则Vim立即离开Insert模式,此时,即使我Insert使用i
Vim 进入模式,也会立即返回Normal模式.
我在Mac OS X 10.8.5上使用Homebrew安装了MacVim
任何想法为什么这不起作用?
编辑:这是我的MacVim版本,包含所有标志:
VIM - Vi IMproved …Run Code Online (Sandbox Code Playgroud) 我正在 CodeIgniter 中创建一个简单的 Changelog 库,基本上每次有人添加、删除、更改或发布博客文章时都会记录一条消息。我将以 300 条为一批将消息记录到文件中。因此,每条第 301 条消息都会记录在一个新文件中。起初我想将日志写入简单的 .log 文件,但后来我有了实际设计样式的想法,并且我必须分离每条消息的每个“属性”(即:用户、消息、日志类型) , ETC。)。因此 .log 文件是不可能的,因为提取信息会很痛苦。
对于此类任务最合适的格式是什么?我已经排除了 MySQL 和 XML,因为它们太重了(特别是考虑到日志文件不会超过(大约)300 行)。我在标题中建议使用 YAML、JSON 和 CSV,但是还有更好的选择吗?
我有当前的规格:
describe "DELETE 'destroy'" do
let(:client) { create(:client) }
#before(:each) do
#@client = create(:client)
#end
it "should delete a client" do
expect {
delete :destroy, :id => client
}.to change(Client, :count).by(-1)
end
# ...
end
Run Code Online (Sandbox Code Playgroud)
我使用时示例失败let但在我使用时工作正常before(:each).
这是实现代码:
def destroy
client = Client.find(params[:id])
if client.destroy
flash[:success] = "Client deleted successfully"
redirect_to kong_clients_url
else
flash[:error] = "Client not deleted for some reason"
redirect_to kong_clients_url
end
end
Run Code Online (Sandbox Code Playgroud)
那么当我使用let时,为什么示例会失败?!
我正在使用lightline.vim,我想展示当前的git分支.目前,我正在使用vim-fugitive这样做,但是,我根本不使用这个插件,除了在状态行中显示git分支.
我的问题是:
有没有办法在不使用逃犯的情况下在状态行中显示git分支?
我试图创建一个我挂钩到lightline的自定义函数.该函数使用systemvimscript函数获取当前git分支.它(没有)运行良好,除了状态线在每次击键时刷新,这打破了其他一切并使vim无法使用.从本质上讲,git分支是system在每次击键时使用该函数获取的......
所以这不是一个可行的解决方案.我"可以"做的是,创建一个全局变量,说明是否获取了git分支,并阻止自定义函数在已经获取的情况下再次获取分支名称.然后每次MacVim失去焦点时我都可以再次获取分支名称(不知道如何使用终端vim进行此操作).虽然这不太理想......
关于如何解决这个问题的任何想法好吗?
json ×2
php ×2
rspec ×2
ruby ×2
vim ×2
carrierwave ×1
csv ×1
git ×1
ini ×1
javascript ×1
logging ×1
middleware ×1
minitest ×1
projects ×1
rspec2 ×1
subdomain ×1
vim-fugitive ×1
xml ×1
yaml ×1