Isbn, Sale 및 Channel의 세 가지 모델이 있습니다.레일 3 : 배열 메서드의 변수로 배열의 내용을 사용합니다.
목표는 :
ISBN :하여 myISBN을위한하여 myISBN
총 매출 : 채널 100 개
하여 myISBN 판매 같은 것을 보이는 ISBN이 show.html.erb보기 목록을 얻을 수 있습니다 25
,745,151 : 채널 3에 대한 25하여 myISBN 판매 : 1 : 2 채널 50 개
하여 myISBN 판매
여기 내 모델입니다. 내가에서 일한지
belongs_to :sale
: Isbn.rb 모델
has_many :sales
has_many :channels, :through => :sales
Sale.rb 모델은
has_many :channels
belongs_to :isbn
Channel.rb 모델 (속성, isbn_id, 수량 sales_channel_id있다) show 메서드에서 isbns 컨트롤러를 사용하면 작업 할 수 있습니다. 나중에 리팩토링을 할 수있을 것이라고 생각했습니다.이 모든 것들이 모델에 포함되어야하는지에 대한 조언은 가장 환영받을 것입니다. 성공적으로
@channelisbn = Sale.where("sales_channel_id =?',1).where("isbn_id=?",3)
@channelsalesisbn = 0
@channelisbn.each {|y| @channelsalesisbn =+ y.quantity}
이 채널 ID가 1 인 모든 판매를 얻고 ISBN ID는 3입니다 그러나 ID가 하드 코딩으로는 많이 사용되지이다 :
지금까지 나는이 있어요. ,
@channellist = Channel.all
@channel = 0
@channelarray = @channellist.map {|z| @channel = z.id}
나에게 [1,2,3,4]
의 사랑스러운 배열을 제공하지만 1을 전달하는 방법을 알아낼 수 없습니다 : 그래서 나는 배열에 채널 ID를 가지고 그 다음 2, 3, 4를 블록으로 묶어 판매 채널 ID가있는 ISBN의 판매를 조회 할 수 있습니다. 그때 배열의 내용을 요약 거라고
@channelarray.each do |channel|
@channelisbn = []
@channelisbn = Sale.where("sales_channel_id = ?", channel).where("isbn_id = ?",3)
@channelsalesisbn = 0
@result = []
@result << @channelisbn.each {|a| @channelsalesisbn =+ a.quantity}
end
: - (나는 한 번에 하나의 문제를 해결할 줄 알았는데 여전히 ISBN ID를 하드 코딩)는 하늘의 배열을 돌려, 이것은 내가 뭘하려합니다.
도움을 주시면 감사하겠습니다. 이것은 내 첫 번째 게시물이므로 제로 수용률이 곧 바뀔 것입니다! 배열, 잘 그룹화 채널에 의해 ISBN에 의해 저에게 판매를주는 :
UPDATE 그냥 여기 내가 좋은이다, 결국, 및 땜질 준비했습니다 어디, 오프이 질문을 마칩니다. group_by 팁 주셔서 감사합니다!콘솔에서
#in the show action in the isbns controller: @isbn = Isbn.find(params[:id]) @channelarray = Channel.select(:id).all @channelarray.group_by {|i| Sale.where("channel_id = ?",i).where("isbn_id =?", @isbn)}
은, 줄 바꿈은 명확성을 위해 추가 : 콘솔에서 당신이보기에서 PARAMS을 통과 할 수 없기 때문에 이 (저변에서, 모든 = 3 첫 @isbn 설정 때문에 @isbn가 제어기 정의 인스턴스 2
하행 콘솔에 닐)
ruby-1.9.2-p180 :067 > @channelarray.group_by {|i| Sale.where("channel_id = ?",i).where("isbn_id =?", @isbn)}
=> {[#<Sale id: 1, isbn_id: 3, quantity: 10000, value: 12000, currency: "GBP", total_quantity: nil, created_at: "2011-05-06 12:30:35", updated_at: "2011-05-07 17:43:13", customer: "Waterstone's", retail_price: nil, discount: nil, invoice_date: "2011-05-24">, #<Sale id: 2, isbn_id: 3, quantity: 1000, value: 500, currency: "GBP", total_quantity: nil, created_at: "2011-05-07 09:37:53", updated_at: "2011-05-07 19:14:52", customer: "Borders", retail_price: nil, discount: nil, invoice_date: "2011-02-05">]=>[#<Channel id: 1>],
[#<Sale id: 3, isbn_id: 3, quantity: 500, value: 1500, currency: "", total_quantity: nil, created_at: "2011-05-07 09:38:11", updated_at: "2011-05-07 19:15:07", customer: "Borders", retail_price: nil, discount: nil, invoice_date: "2011-12-05">, #<Sale id: 4, isbn_id: 3, quantity: 45, value: 300, currency: "", total_quantity: nil, created_at: "2011-05-07 09:38:38", updated_at: "2011-05-07 19:15:36", customer: "Borders", retail_price: nil, discount: nil, invoice_date: "2011-06-05">]=>[#<Channel id: 2>],
[]=>[#<Channel id: 3>],
[]=>[#<Channel id: 4>]}
UPDATE 이고, I는 생성 된 해시 키 값 (PA)을 가지고 잘못된 방향으로 돌아 간다. 판매 데이터를 포함하는 배열이 핵심이었습니다. 그것은 값이었을 것입니다.
@salesbychannel = @salesbychannelwrong.invert
invert
방법은 키 - 값 쌍을 전환 : Rubydocs 하루 저장. 단. 어디(),이 같은 ARel 번호에 배열을 전달하고 찾고있는 무엇
안녕 Srdjan하는 데 도움이 도와 주셔서 너무 감사합니다 : 그것은 작동하지 않는 경우, 당신은 항상 다음과 같이 액티브 번호 찾기에 배열을 전달할 수 있습니다. 채널 배열에 * 모든 * 채널 ID가 포함되어 있으므로 판매가 * 모든 * 판매를 포함하는 배열을 반환하므로 내 생각을 분명히했습니다. 내가 필요로하는 것은 한 번에 하나씩 채널 ID를 전달할 수 있고, isbn/채널 당 한 세트의 데이터를 가져올 수 있어야합니다. 아마도 처음부터 채널 ID 배열을 만드는 아이디어를 다시 생각해 볼 필요가있을 것입니다. – snowangel
@snowangel, 더 자세히 읽고, 나는 이것이 더 복잡한 문제라는 것을 알고 있습니다. 필요한 것은 집계를위한 ARel # 그룹입니다. 또한 Enumerable # 맵을 사용하는 대신 Channel.select (: id) .all –
우, 크래킹을 수행하여 채널 모델에서 ID를 선택할 수 있습니다. 정말 고마워! 내가 충분한 명성을 얻었을 때, 내가 너를 지켜줄거야. 매우 감사. – snowangel