You're calling create
with the time_delta_params
that isn't going to contain the tweetRatings
data. You would need to do something like params['time_delta'][:final] = tweetRating[:finalRating]
. You could also call create and create your hash there or rename the values in the tweetRatings
hash to match what is in the model.
Validating parameters to create a class, parameters created in the controller arn't being added.
-
13-07-2023 - |
Domanda
I create a class that takes two input parameters from the user, these input parameters are then used to create five others, the problem is that the five others don't show up when I check my validated paramaters only the first ones.
I know that all of the new parameters are added to the params but they don't show up in the model time_delta_params hash when I check what's in it only the first two. Thanks for any help!
My create method for the controller
def create
# XXX Add these columns to the model and populate them
# finalRating, positiveTweets, negativeTweets, neutralTweets, totalTweets
tweetRatings = {:finalRating => 0, :positiveTweets => 0, :negativeTweets => 0, :neutralTweets => 0}
@stock = Stock.find(params[:stock_id])
tweets = getTweets(@stock.hashtag, time_delta_params[:start], time_delta_params[:length].to_i)
tweets.each do |tweet|
case processTweet(tweet)
when 1
tweetRatings[:positiveTweets] += 1
tweetRatings[:finalRating] += 1
when -1
tweetRatings[:negativeTweets] += 1
tweetRatings[:finalRating] -= 1
else
tweetRatings[:neutralTweets] += 1
end
end
params[:final] = tweetRatings[:finalRating]
params[:positive] = tweetRatings[:positiveTweets]
params[:negative] = tweetRatings[:negativeTweets]
params[:neutral] = tweetRatings[:neutralTweets]
params[:total] = tweets.count
# printSomthingToRender(time_delta_params)
@time_delta = @stock.time_deltas.create(time_delta_params)
redirect_to stock_path(@stock)
end
My validation:
def time_delta_params
params.require(:time_delta).permit(
:start,
:length,
:final,
:positive,
:negative,
:neutral,
:total
)
end
Soluzione 2
Altri suggerimenti
You are not merging the additional parameters into the time_delta
hash, but straight to the top level of params
. time_delta
is a hash within params
.
You need to do something like:
params[:time_delta].merge!(final: tweetRatings[:finalRating],
positive: tweetRatings[:positiveTweets],
negative: tweetRatings[:negativeTweets],
neutral: tweetRatings[:neutralTweets],
total: tweets.count)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow