2014-12-23 2 views
0

나는 현재 피클에 빠져있다. 나는 현재의 루비 지식으로 너무 많이 파고 들지만 나는 포기하고 싶지 않다. 나는 현재 게시 할 수있는 트위터를 가지고 있으며 사람들은 https://www.railstutorial.org/book/ 덕분에 다른 사람들을 따라갈 수 있습니다. 이 튜토리얼 트위터에 해시 태그를 추가하고 싶습니다. 위해서는 트윗과 해시 태그 이후 2 테이블을 만들려면 많은 관계가 많습니다. 테이블은 다음과 같습니다루비의 데이터베이스에 데이터 추가하기

당신이 트윗과 해시 태그의 키를 유지하는 데 필요한 추가 테이블
class CreateHashrelations < ActiveRecord::Migration 
    def change 
    create_table :hashrelations do |t| 
     t.integer :tweet_id 
     t.integer :hashtag_id 

     t.timestamps null: false 
    end 
    add_index :hashrelations, [:tweet_id, :hashtag_id], unique: true 
    end 
end 

. 내가 저장

class Hashtag < ActiveRecord::Base 
    has_many :hashtagrelations, dependent: :destroy 
    has_many :tweets, through: :hashtagrelations 
    validates :name, presence: true 
end 

class Hashrelation < ActiveRecord::Base 
    belongs_to :tweet 
    belongs_to :hashtag 
    validates :tweet_id, presence: true 
    validates :hashtag_id, presence: true 
end 

class Tweet < ActiveRecord::Base 
..... 
    has_many :hashtagrelations, dependent: :destroy 
    has_many :hashtags, through: :hashtagrelations 
.... 

end 

트윗이 submited 경우 : 그리고 다른 테이블 내가 ID와 나는 다음 relathipships을 넣어 hastag 모델에서

class CreateHashtags < ActiveRecord::Migration 
    def change 
    create_table :hashtags do |t| 
     t.string :name 

     t.timestamps null: false 
    end 
    end 
end 

의 이름이 해시 태그 테이블 저장된 경우 해시 태그가 있는지 확인하고 필요한 경우 해시 태그 및 해시 테이블에 필요한 데이터를 추가하려고합니다. 나는이 이런 식으로 수행하려고 :

class TweetsController < ApplicationController 
...... 


    def create 
    @tweet = current_user.tweets.build(tweet_params) 
    if @tweet.save 
     add_hashtags(@tweet) 
     flash[:success] = "Tweet created!" 
     redirect_to root_url 
    else 
     @feed_items = [] 
     render 'static_pages/home' 
    end 
    end 

...... 

    private 

........ 

    def add_hashtags(tweet) 
     tweet.content.scan(/(?:\s|^)(?:#(?!(?:\d+|\w+?_|_\w+?)(?:\s|$)))(\w+)(?=\s|$)/){ |tag| 
     newhash[:new] = tag 
     @hashtag = Hashtag.new(new_hash[:new]) 
     @hashtag.save 
     data[:new] = [tweet.id,@hashtag.id] 
     @hashrel = Hashtagrel.new(data[:new]) 
     @hashrel.save 
     } 
    end 

end 

올바른 방법이 아니다. 나는 단지 거기 태그를했다면 나는이 데이터를 추가하는 방법을 나는이 바보 같은 질문의 종류 실현

When assigning attributes, you must pass a hash as an argument. 

을 얻을 것입니다하지만 난 나를 가르치고 더 자습서를 발견했기 때문에 newhash 및 데이터를 추가하려 내 테이블에. 나는이 값의 배열입니다 당신의 도움

답변

1

에 대한 감사 할 것입니다 :

data[:new] = [tweet.id,@hashtag.id] 

다른 변수 (또는 데이터 구조) 내부에 물건을 이동하기 전에 명시 적 처음 인보십시오.

@hashrel = Hashtagrelation.new(tweet_id: tweet.id, hashtag_id: @hashtag.id) 

나머지 코드는 좋아 보인다. 나는 생각한다.

+1

옙, 그 것이었다 : P 대단히 감사합니다. D –

관련 문제