Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 5

0
votes
answers
67 views
+10

問題與軌道5升級

0

期間schema.rb文件升級到Rails 5之後,我收到類似以下每次我嘗試從模式加載時間(建立一個新的計算機上的應用程序的錯誤信息,運行rails db:test:prepare運行測試之前,等):問題與軌道5升級

ActiveRecord::StatementInvalid: PG::UndefinedObject: ERROR: type "serial" does not exist 
LINE 1: SELECT 'serial'::regtype::oid 

搜索周圍沒有產生太大的幫助。最相關的線程是這一個:https://github.com/rails/rails/issues/30298但我並不想運行任何新的遷移,也不會在schema_plus_indexes寶石似乎有什麼關係問題(在該線程所描述的兩個問題)。

沙发
0
0

在我們的例子中,我們不要讓他們已經對所有數據庫運行後周圍的遷移文件。因此,在升級到rails 5時,存在0個遷移文件。這個問題似乎是,如果您實際運行遷移文件(即使嘗試rails db:migrate而沒有遷移文件存在將不起作用),rails只會自動「修復」您的schema.rb文件。

的解決方案,對我們來說,是創建一個空白的遷移和爲了得到正確格式化的schema.rb文件運行rails db:migrate

0
votes
answers
39 views
+10

顯示在滑軌

0

若干嵌套形式我有這種選擇在滑軌顯示在滑軌

<%= g.select :num_periods, options_for_select([["Mensual", 12], ["Semestral", 6], ["Trimestral", 4], ["Anual", 1]]) %> 

根據我想顯示n次此嵌套形式所選擇的選項。 (我有一個循環,現在顯示它)

<% for i in (1..4) %> 
    <%= g.fields_for :periods do |p| %> 
    <%= p.label "Propuesto" %> 
    <%= p.number_field :proposed, class:"form" %> 
    <%= p.hidden_field :reached, :value => -1 %> 
<% end %> 

我發現,這可能使用JQuery達到,但我不知道怎麼了,可能有人幫助我嗎?

+0

繼續看看你的循環的HTML輸出,並編寫一個jQuery函數,將它輸出到所需容器的'x'次。如果不知道你要在這裏做什麼,很難解釋得更徹底。 –

沙发
0
0

select選項將生成html,即您的起點編寫jquery函數。你需要與chrome developer tolls檢查在你的頁面生成的HTML

<%= g.select :num_periods, options_for_select([["Mensual", 12], ["Semestral", 6], ["Trimestral", 4], ["Anual", 1]]) %> 

它看起來應該像這樣從ActionView::Helpers::FormOptionsHelper的API頁面:

<select name="g[num_periods]" id="g_num_periods"> 
    <option value="12">Mensual</option> 
    <option value="6">Semestral</option> 
    <option value="4">Trimestral</option> 
</select> 

那麼容易的選擇,在視圖中顯示所有輸入字段,並根據您的需要隱藏那些不需要的字段。因此,他們都將被隱藏,你可以告訴你需要用一個:

$('select').change(function(){ 
    $('select option:selected').click(function() { 
     var option_selected = $(this).text(); 
     //now you need to find the div to show and use the .show function to display it 
     }); 
}); 

這是我jsfiddle

我知道這是不是一個很好的解決方案,但我沒有全部來自信息你的代碼也,我不知道該附加格的形式將允許你這樣做POST請求,因爲在防止CSRF

形式的authenticity_token另外這給你更多的信息關於authenticity token

0
votes
answers
67 views
+10

在外部腳本中調用模型及其方法

0

我試圖使用rails runner訪問activerecord模型。我通過了以下內容:rails runner "TabAccount.find_by_id(1).screen_name"。我知道這個模型是有效的,因爲我可以使用它並查看我的Rails應用程序中的條目。在外部腳本中調用模型及其方法

最終我想做一個班,這是一個孩子TabAccount,我越來越掛了。我想象中的腳本看起來會沿着這個線路:

require Rails.root.join('app', 'models', 'tab_account.rb') 
class TwitterAccount < TabAccount 

    def initialize() 
    @screen_name = TabAccount.find_by_id(1).screen_name 
    end 
end 

我可以假設我很密切,有一些挑剔細節,我忽略了?

沙发
0
0

對於這個特定的問題,我掛斷了是爲了確保我可以訪問模型,顯然我需要做的就是驗證這個模型是否在rails r "puts TabAccount.find_by_id(1).screen_name"中。然後我在腳本中做同樣的事情來驗證這種情況下的模型。

0
votes
answers
47 views
+10

在視圖中動態加載簡單內容

0

我跟着this tutorial構建一個簡單的功能:點擊一個按鈕加載存儲在部分內容中的內容。我想稍後在不希望使用信息重載視圖的各個地方使用它,以便讓它們保持輕微,但如果需要,則允許用戶訪問信息。在視圖中動態加載簡單內容

繼教程這是代碼:

# in view: knowledge/index.html.haml 

.container 
    .row 
    .col-xs-12 
     = link_to 'Show more info', fetch_adus_path, :remote => true 
     #adus 

-

# in: config/routes.rb 

get '/knowledge/fetch_adus', to: 'knowledge#selected_adus', as: 'fetch_adus' 

-

# my partial: knowledge/_adus_all.html.haml 

%p Content will be added here 

-

# in: knowledge_controller.rb 

def selected_adus 
    respond_to do |format| 
    format.js 
    end 
end 

-

# knowledge/selected_adus.js.haml 

$("#adus").html("#{escape_javascript(render partial: 'adus_all')}"); 

在知識(索引頁) - 當我將鼠標懸停在「顯示詳細信息」瀏覽器表明它應該鏈接到本地??主機:3000 /知識/ fetch_adus但是當我點擊它沒有任何反應。我在控制檯得到一個錯誤:

GET http://localhost:3000/knowledge/fetch_adus 500 (Internal Server Error) jquery.self-bd7ddd393353a8d2480a622e80342adf488fb6006d667e8b42e4c0073393abee.js?body=1:10255

這(點擊後)導致這行代碼:

xhr.send((options.hasContent && options.data) || null);

爲了提供更多的情況下,當我兩次單擊鏈接我得到一個更簡單錯誤:

knowledge/fetch_adus Failed to load resource: the server responded with a status of 500 (Internal Server Error)

導致此軌錯誤頁面:

ActionController::UnknownFormat in KnowledgeController#selected_adus

ActionController::UnknownFormat

Extracted source (around line #25):

respond_to do |format|

我是新來的鐵軌,如果任何人有任何想法如何解決它,或者如果有任何其他方式建立我所描述的功能,我將非常感謝任何建議。

+0

顯示請求發出時的服務器日誌和完整的控制器代碼 – dstull

+0

@dstull我檢查了日誌,發現了什麼問題。在部分文件中,我有一些被註釋掉的代碼,但奇怪的是它導致了模板錯誤。刪除它和兩個js解決方案(escape_javascript和j渲染 - 翻譯成哈姆 - 工作)。不知何故,我沒有檢查日誌。將其添加到我的個人調試場景清單中。非常感謝! – Socha

沙发
0
1

的解決方案是簡單的比預期的。感謝@dstull,我檢查了日誌,發現了什麼問題。在部分我有一些代碼已被註釋掉,但奇怪的是它導致模板錯誤。刪除它和兩個js解決方案(escape_javascript和j渲染 - 翻譯成哈姆 - 工作)。始終檢查日誌是一種很好的做法。

板凳
0
0

看起來像你的知識問題/ selected_adus.js.haml文件

嘗試重新格式化$("#adus").html("#{escape_javascript(render partial: 'adus_all')}");$("#adus").html("<%= j render partial: 'knowledge/adus_all' %>");

+0

感謝@Zubin--看起來這兩種解決方案都是正確的,問題出在其他地方 - 在一個已被註釋掉的代碼中,但仍然導致模板錯誤。 – Socha

0
votes
answers
45 views
+10

如何在更復雜的Rails應用程序中考慮模型和關係?

0

我已經學習Ruby on Rails很長一段時間了,並且已經構建了幾個玩具應用程序。我參加過很多課程(如Hartl,Code School,Udemy等)。現在我正在研究一個相當複雜的寵物項目 - 許多模型和關係。如何在更復雜的Rails應用程序中考慮模型和關係?

這是我的問題:我如何從模型和關係角度思考一個複雜的應用程序?在我看來,應該有一些可視化的方法來對所有這些進行建模,但是我沒有在任何課程中看到過有關這種建模的討論。當然,Rails指南中有非常簡單的圖表,但我如何將它擴展到更復雜的東西?或者,我是否讓這個過於複雜?我是否剛剛開始編碼模型和關係,並查看它對我的影響?看起來這種特殊的方法很容易讓我進入一個角落,如果我把自己描繪成一個角落,就必須從頭開始。

是否有工具或博客文章可以幫助我?

(注:我也張貼在Reddit.Com/r/Rails了這個問題https://www.reddit.com/r/rails/comments/7c9zbf/how_to_think_about_rails_web_application/

+1

我不知道你希望得到什麼答案。關於rails的書籍,視頻,博客等清單?指向數據庫圖表教程的鏈接?關於如何設計應用程序的個人意見?這不是一個非常具體的問題,所以我不知道如何回答。 –

沙发
0
3

這聽起來像你追求的是一個架構設計師。我會在這篇文章的底部連接一個。模式設計器將允許您可視化應用程序中的所有關係,並查看一個模型如何連接到另一個模型。它們在編寫複雜的數據庫查詢中非常有用。我附上了一個相當簡單的設計示例,只是爲了讓您瞭解它們的作用。您還可以添加模型在設計中的所有列,我通常只是將它用於關係。 http://ondras.zarovi.cz/sql/demo/ schema expample

板凳
0
1

完全基於我的經驗/意見了......

最終你會改變你的數據庫設計幾次爲您打造您的應用程序。

我會從白板開始,然後考慮使用架構設計器作爲@aram提到的。

當你看到大局時,從今天的功能需要的關係開始。您可以繼續參考原始設計,以便您可以看到更大的圖像,但是您不希望在需要之前過度佔用體系結構,因爲它會改變。

在您編寫一些代碼並構建這些關係之後,您可以使用rails-erd gem以編程方式生成應用程序的模式來檢查自己。

+0

雖然我給了@Aram的答案,但我想說「謝謝」你的回答,特別是提到rails-erd Gem。真的很高興看到我的模型作爲圖! –

0
votes
answers
71 views
+10

如何設置spree_static_content與狂歡3.x和導軌5生成我一直在試圖與大禮包3.X設置寶石spree_static_content和軌道5,但也有無盡的錯誤靜態頁面

0

(遷移不運行,gem依賴),這是未來。文檔已經過時,對任何寶石和大宗商業項目都沒有任何幫助。如果有人最近使用過這些項目,請分享調試結果。如何設置spree_static_content與狂歡3.x和導軌5生成我一直在試圖與大禮包3.X設置寶石spree_static_content和軌道5,但也有無盡的錯誤靜態頁面

沙发
0
0

當設置spree_static_content寶石和Rails 5.x和大禮包3.X有各種錯誤時只添加寶石spree_static_content到你的Gemfile你會得到。 安裝下面的寶石到你的Gemfile中,你不會得到任何錯誤,併爲您的應用程序的靜態內容將輕鬆地設置釐米。

gem 'spree_static_content', github: 'spree-contrib/spree_static_content' 

gem 'globalize', git: 'https://github.com/globalize/globalize' 
gem 'activemodel-serializers-xml' 

gem 'spree_i18n', github: 'spree-contrib/spree_i18n' 
gem 'spree_globalize', github: 'spree-contrib/spree_globalize' 

下一步,運行以下命令

bundle install 
bundle exec rails g spree_i18n:install 
bundle exec rails g spree_globalize:install 
bundle exec rails g spree_static_content:install 

現在,只需創建從管理頁面,但不要忘記選擇商店名稱複選框路線的大禮包3.x的工作

0
votes
answers
45 views
+10

紅寶石日期格式差「填充空白」

1

在Ruby documentation,存在用於格式化日期(時間)串兩個非常相似的值紅寶石日期格式差「填充空白」

  1. %-d描述爲no-padded (1..31)
  2. %e描述爲blank-padded (1..31)

什麼是這兩者之間的區別?

+1

仔細觀察:'%e'的'1'具有領先的空間。 – Stefan

沙发
0
2

這兩者之間的區別是:

%-d將打印出來的數字,沒有前導零,也沒有空間,例如:

DateTime.new(2016, 02, 01, 16, 00).strftime('%m/%-d/%Y') 
> "02/1/2016" 

%e將打印出一個領先的空間,但沒有一個前導零

DateTime.new(2016, 02, 01, 16, 00).strftime('%m/%e/%Y') 
> "02/ 1/2016" 
0
votes
answers
32 views
+10

如何設置一個列值:在創建新項目時使用表格的位置爲該項目的id:

0

我有一個List控制器/ model/whatever-you-would-call-it,當我創建一個帶有窗體,我想將:position列設置爲其id:id。我不知道我會怎麼做。如何設置一個列值:在創建新項目時使用表格的位置爲該項目的id:

順便說一下,這個位置的類型是Integer。

我的想法:

  • 在控制器:lists_controller.rb,在新的方法,或者也許是創建方法,添加一些代碼。
  • 在設置其他屬性時在表單中的某個位置,潛入那個位置的小狗。 (我只是想在創建新列表時將位置設置爲id,雖然沒有更新)
  • 在模型中自己設置它。 (我不想設定:位置爲:ID,當我更新/編輯,(只有當創建新的),則該項目,所以我敢肯定,這是行不通的)

下面是一些代碼,可能幫助:

_form.html.erb

<%= form_with(model: @list) do |form| %> 
    <div class='addField'> 
    <%= form.text_field :name, placeholder: "Name" %> 
    <%= form.text_field :description, placeholder: "Description" %> 
    <%= form.check_box :private,class: 'check_box' %> 
    </div> 
    <div class='addLabel'> 
    <div> 
     <%= form.label :name %> 
    </div> 
    <div> 
     <%= form.label :description %> 
    </div> 
    <div> 
     <%= form.label :private %> 
    </div> 
    </div> 
    <div id='submitNew'> 
    <%= form.submit 'Done', :class => 'btn btn-primary' %> 
    </div> 
<% end %> 

lists_controller.rb

class ListsController < ApplicationController 

    def new 
    @list = List.new 
    end 

    def create 
    @list = List.new(list_params) 

    if @list.save 
     redirect_to @list 
    else 
     render 'new' 
    end 
    end 

    private 
    def list_params 
    params.require(:list).permit(:name, :description, :private) 
    end 
end 

這只是控制器的一個片段。

如果你能指出我正確的方向,我將不勝感激。

+1

是位置需要由最終用戶對UI提供?或者你是否希望在創建模型時將位置接受在表單中? 如果沒有,那麼你可以在模型的after_create回調中將id分配給位置。 –

+0

@NarenSisodiya如何將id分配給after_create中的位置? – samando

+0

遲到了...... AytanLeibowitz的回答是正確的。 –

沙发
0
2

您可以修改您的列表模式是這樣的:

list.rb

class List < ApplicationRecord 
    after_create :set_position 
    .... existing model code ... 

    private 
    def set_position 
    self.update_attribute(:position, self.id) 
    end 
end 
+0

當我在ListsController中放置'after_create:set_position'時它不喜歡它 – samando

+0

什麼是錯誤? – AytanLeibowitz

+0

**對於ListsController,未定義的方法'after_create':Class您的意思是? after_action ** – samando

0
votes
answers
54 views
+10

登錄後重定向到首頁

0

在這裏反應新手。 我有一個應用程序與反應和軌道建成。在主頁上有一個登錄鏈接。將用戶帶到登錄頁面。在驗證用戶名是否存在時,我正嘗試使用下面的代碼重定向到主頁。登錄後重定向到首頁

export default class Login extends React.Component { 

    constructor(props) { 
     super(props); 
     this.state = { 
      username: '', 
      isValid: false 
     }; 
     this.handleSubmit = this.handleSubmit.bind(this); 
     this.handleChange = this.handleChange.bind(this); 
    } 

    handleSubmit(event) { 
     axios.get('/isuser/'+this.state.username) 
      .then(res => { 
       this.setState({ isValid: true }); 
      }) 
      .catch(function (error) { 
       console.log(error); 
      }); 
     event.preventDefault(); 
    } 

    handleChange(event) { 
     this.setState({username: event.target.value}); 
    } 

    render() { 
     if (this.state.isValid) { 
      return <Redirect to={{ 
         pathname: '/', 
         state: { 
           username: this.state.username, 
           loggedIn: true 
         } 
       }}/> 
     } 
     return (
       <div> 
       //form 
       </div> 
     ); 
    } 
} 

但是,道具是空的。我使用下面的代碼來獲取它。

export default class LoginLink extends React.Component { 

    constructor(props) { 
     super(props); 
     if(this.props.state == undefined) { // always empty 
      this.state = {loggedIn: false, redirect: false}; 
     } 
     else { 
      this.state = { 
         loggedIn: this.props.location.state.loggedIn, 
         username: this.props.location.state.username 
      }; 
     } 
     this.handleOnClick = this.handleOnClick.bind(this); 
    } 

    handleOnClick(event) { 
     this.setState({redirect: true}); 
     event.preventDefault(); 
    } 

    render() { 
     if (this.state.redirect) { 
      return <Redirect to={{ 
         pathname: '/login' 
        }}/> 
     } 
     else { 
      if (this.state.loggedIn) { 
       return (
        <ul className="nav navbar-nav navbar-right" id="topnav"> 
         <li><a href="">{this.state.username}</a></li> 
        </ul> 
       ); 
      } 
      else { 
       return (
        <ul className="nav navbar-nav navbar-right" id="topnav"> 
         <li> 
          <Button bsStyle="link" onClick={this.handleOnClick}>Log in</Button> 
         </li> 
        </ul> 
       ); 
      } 
     } 
    } 
} 

這裏是我的路線:

<main> 
    <Switch> 
    <Route exact path='/' component={Home}/> 
    <Route path='/login' component={Login}/> 
    </Switch> 
</main> 

我不知道是否有某種形式的無限循環的(調用超)。 任何幫助表示讚賞。

+0

避免變異的狀態,首先,使用'this.setState();',而不是'this.state()'什麼是你想要''的組件? – Aaqib

+0

@Aaqib你可以在構造函數中做到這一點 – mjwatts

+0

@Archana是重定向組件的構造函數 - 它不清楚嗎? – mjwatts

沙发
0
0

在構造函數中返回不同的狀態並不是很好的做法。因爲組件的狀態結構還不清楚。我建議是這樣的:

constructor(props) { 
    super(props); 
    this.state = { 
    loggedIn: props.location.state.loggedIn || false, 
    username: props.location.state.username || null, 
    } 
} 

然後在render()功能

render() { 
    // if loggedIn go to '/' 
    if (this.state.loggedIn) { 
    return <Redirect to={{ pathname: '/', state: { ...this.state, loggedIn: true } }} /> 
    } 
    // otherwise 
    // return something else or Redirect to login... 
} 
+0

Hi IIan, 我已經更新了代碼。你現在可以看看嗎? – Archana

0
votes
answers
40 views
+10

Ruby on Rails的 - 在創建記錄添加END_TIME

1

我想有這是假設有5分鐘加入到它的實例的created_at值ends_at欄的記載:Ruby on Rails的 - 在創建記錄添加END_TIME

Class Post < ApplicationRecord 
    after_create :set_end_time 

    private 
    def set_end_time 
     self.ends_at = self.created_at + 5.minutes 
    end 
end 

這節省了ends_at列作爲數據庫中的空值

+0

找到答案https://stackoverflow.com/a/27443303/6361142 –

沙发
0
2

您激發after_create掛鉤。它在Rails調用SQL INSERT命令後被觸發。因此,當對象保存到數據庫時,您已經設置了ends_at,並且不會再保存該對象。初始化的對象ends_at不會去任何地方,然後只是從內存中清除。

before_create取代你的掛鉤,它應該爲你做竅門。

+0

'before_create'也不起作用,請閱讀相關問題,例如添加過期日期https://stackoverflow.com/a/27443303/6361142,可能是由於'ends_at'的數據包引起的。 –

+0

Can你請:1.爲此表粘貼db/schema塊? 2.檢查'set_end_time'是否被'logger'或'debugger'在'before_create'情況下調用 – AntonTkachov

板凳
0
0

你忘了保存記錄

def set_end_time 
    self.ends_at = self.created_at + 5.minutes 
    save 
end 
地板
0
0

一個艱難的方式做這將是設置默認值,在創建行時如果爲例 change_column_default遷移 :帖子:END_TIME「 current_timestamp +(5 ||'minutes'):: interval「如果你使用postgres作爲例子。

但只有在你確定這不會很快改變時纔會這樣做。 如果是,那麼使用自定義setter設置before_create掛鉤是要走的路(請確保您的字段是日期時間類型)