我是Rails新手,並且遇到與我正在嘗試編寫的Rails縮短應用程序有關的問題。URL Shortener隨機標識未設置
我下面在Youtube上觀看教程這個應用程式:http://www.youtube.com/watch?v=q67bJ0yC2SM
有人可以幫助我深有體會,新行動的創建流量控制?我不理解新動作如何將數據輸入表單和創建動作。
我在新操作中設置了綁定pry。當程序碰到binding.pry時,這就是存儲在params中的東西。當新行動被擊中時,原始身份證的表格中沒有任何內容被輸入。
17: def new
18: @url = Url.new
19:
20: letters = [('a'..'z'), ('A'..'Z')].map { |l| l.to_a }.flatten
21: @url.random_id = (0...8).map { letters[rand(letters.length)] }.join
=> 22: binding.pry
23: end
[1] pry(#<UrlsController>)> @url.random_id
=> "ogEJCcHm"
[2] pry(#<UrlsController>)> @url.original
=> nil
[3] pry(#<UrlsController>)> params
=> {"action"=>"new", "controller"=>"urls"}
[4] pry(#<UrlsController>)>
退出綁定pry後,表單現在加載到localhost:3000上,然後我在表單中輸入一個地址。
當它遇到下一個綁定pry時,程序現在處於創建操作中,原始url現在被設置,並且random_id爲=「」。
我嘗試將字母和@url_random_id從新方法移動到創建,然後獲取錯誤消息。
未定義的方法`random_id =」爲零:NilClass
這裏是在我的控制器的代碼。
class UrlsController < ApplicationController
def index
@urls = Url.all
end
def show
url = Url.where(random_id: params[:id]).first
if url
redirect_to url.original
else
render 'new'
end
end
def new
@url = Url.new
letters = [('a'..'z'), ('A'..'Z')].map { |l| l.to_a }.flatten
@url.random_id = (0...8).map { letters[rand(letters.length)] }.join
binding.pry
end
def url_params
params.require(:url).permit(:original, :random_id)
end
def create
binding.pry
@url = Url.new(url_params)
#binding.pry
if @url.save
redirect_to urls_path
else
render 'new'
end
end
end
我在我的路線文件中的以下內容:
Urly::Application.routes.draw do
root :to => redirect('/urls/new')
resources :urls, :only => [:index, :show, :new, :create]
end
我在new.html.erb文件如下:提前
<%= form_for @url do |f| %>
<%= f.label :original %> : <%= f.text_field :original %>
<p>
<%= f.hidden_field :random_id, :value => @url_random_id %>
</p>
<p>
<%= f.submit "Shorten my Url" %>
</p>
<% end %>
感謝任何幫助你可以幫助我理解我做錯了什麼。
讓我知道你是否需要關於我正在嘗試做什麼的任何附加信息。
完美運作。無論表單中輸入的URL長度如何,@random_id似乎總是8個字符。如果算法設置爲5個字符而不是8個,則縮短的URL的長度將始終爲5而不是8。是正確的嗎?感謝您的及時回覆。感謝幫助! – user2275037